|
- #include <stdio.h>
- #include <stdlib.h>
- #include <time.h>
- #define MAXSIZE 30
- void GenLottoNumbers(int *pNum, const int size);
- void PrintNumbers(int *pNum, const int size);
- int main(void)
- {
- int A[6] = {0};
- int B[6] = {0};
- int i, j, hit;
- srand((unsigned int )time(NULL));
- for (i=1; i<=10; i++)
- {
- printf("第%d期 - 開出號碼: ", i);
- GenLottoNumbers(A, 6);
- PrintNumbers(A, 6);
- printf("你選的號碼: ");
- GenLottoNumbers(B, 6);
- PrintNumbers(B, 6);
- for (j=0, hit=0; j<6; j++)
- if (A[j]==B[j])
- hit++;
- printf("中了%d個號碼\n", hit);
- }
- return 0;
- }
- void PrintNumbers(int *pNum, const int size)
- {
- int i;
- if (!pNum || size <= 0)
- return;
- for (i=0; i<size; i++)
- printf("%d ", *(pNum+i));
- }
- // for qsort()
- int compare(const void *arg1, const void *arg2)
- {
- if ( *(int *)arg1 < *(int *)arg2 )
- return -1;
- else if ( *(int *)arg1 > *(int *)arg2 )
- return 1;
- else
- return 0;
- }
- // Generate unique random numbers and sort them
- void GenLottoNumbers(int *pNum, const int size)
- {
- int number[MAXSIZE];
- int i, j, n;
- int min, max;
- if (!pNum || size <= 0 || size > MAXSIZE)
- return;
- for(i=0; i<MAXSIZE; i++)
- {
- number = i+1;
- }
- min = 0;
- max = MAXSIZE-1;
- // Generate unique numbers
- for (i=0; i<size && min<=max; i++) // 下限必須小於等於上限
- {
- n = rand() % ((max + 1) - min) + min;
- pNum=number[n];
- //printf("%d ", number[n]); // 印出產生的號碼
- if (n==min) // 亂數等於範圍的下限,不需要shift,直接更新下限值
- min++;
- else if (n==max) // 亂數等於範圍的上限,不需要shift,直接更新上限值
- max--;
- else // 需要shift
- {
- // 將 array裡的數字從n+1開始向前shift
- for(j=n+1; j<=max; j++)
- number[j-1] = number[j];
- max--; // 更新上限值
- }
- }
- qsort((void *)pNum, (size_t)6, sizeof(int), compare); // sort the random numbers
- }
複製代碼 |
|