搜索
熱搜: 活動 交友 discuz
查看: 1357|回復: 0
打印 上一主題 下一主題

[教學] 樂透彩系列範列

[複製鏈接]
跳轉到指定樓層
1#
發表於 2007-8-14 04:41:44 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>

  4. #define MAXSIZE 30

  5. void GenLottoNumbers(int *pNum, const int size);
  6. void PrintNumbers(int *pNum, const int size);

  7. int main(void)
  8. {
  9.         int A[6] = {0};
  10.         int B[6] = {0};
  11.         int i, j, hit;
  12.         srand((unsigned int )time(NULL));

  13.         for (i=1; i<=10; i++)
  14.         {
  15.                 printf("第%d期 - 開出號碼: ", i);
  16.                 GenLottoNumbers(A, 6);
  17.                 PrintNumbers(A, 6);

  18.                 printf("你選的號碼: ");
  19.                 GenLottoNumbers(B, 6);
  20.                 PrintNumbers(B, 6);

  21.                 for (j=0, hit=0; j<6; j++)
  22.                         if (A[j]==B[j])
  23.                                 hit++;
  24.                 printf("中了%d個號碼\n", hit);
  25.         }

  26.         return 0;
  27. }

  28. void PrintNumbers(int *pNum, const int size)
  29. {
  30.         int i;

  31.         if (!pNum || size <= 0)
  32.                 return;

  33.         for (i=0; i<size; i++)
  34.                 printf("%d ", *(pNum+i));
  35. }

  36. // for qsort()
  37. int compare(const void *arg1, const void *arg2)
  38. {
  39.         if ( *(int *)arg1 < *(int *)arg2 )
  40.                 return -1;
  41.         else if ( *(int *)arg1 > *(int *)arg2 )
  42.                 return 1;
  43.         else
  44.                 return 0;
  45. }

  46. // Generate unique random numbers and sort them
  47. void GenLottoNumbers(int *pNum, const int size)
  48. {
  49.         int number[MAXSIZE];
  50.         int i, j, n;
  51.         int min, max;

  52.         if (!pNum || size <= 0 || size > MAXSIZE)
  53.                 return;

  54.         for(i=0; i<MAXSIZE; i++)
  55.         {
  56.                 number = i+1;
  57.         }

  58.         min = 0;
  59.         max = MAXSIZE-1;

  60.         // Generate unique numbers
  61.         for (i=0; i<size && min<=max; i++)  // 下限必須小於等於上限
  62.         {
  63.                 n = rand() % ((max + 1) - min) + min;
  64.                 pNum=number[n];
  65.                 //printf("%d ", number[n]);  // 印出產生的號碼

  66.                 if (n==min)  // 亂數等於範圍的下限,不需要shift,直接更新下限值
  67.                         min++;
  68.                 else if (n==max)  // 亂數等於範圍的上限,不需要shift,直接更新上限值
  69.                         max--;
  70.                 else  // 需要shift
  71.                 {
  72.                         // 將 array裡的數字從n+1開始向前shift
  73.                         for(j=n+1; j<=max; j++)
  74.                                 number[j-1] = number[j];
  75.                         max--;  // 更新上限值
  76.                 }
  77.         }

  78.         qsort((void *)pNum, (size_t)6, sizeof(int), compare);  // sort the random numbers
  79. }
複製代碼
您需要登錄後才可以回帖 登錄 | 註冊

本版積分規則

本論壇為非營利之網路平台,所有文章內容均為網友自行發表,不代表論壇立場!若涉及侵權、違法等情事,請告知版主處理。


Page Rank Check

廣告刊登  |   交換連結  |   贊助我們  |   服務條款  |   免責聲明  |   客服中心  |   中央分站

手機版|中央論壇

GMT+8, 2024-4-29 08:00 , Processed in 0.376191 second(s), 24 queries .

Powered by Discuz!

© 2005-2015 Copyrights. Set by YIDAS

快速回復 返回頂部 返回列表