中央論壇 - CENTER BBS

標題: 樂透彩系列範列 [打印本頁]

作者: f66666602    時間: 2007-9-4 09:06
標題: 樂透彩系列範列
#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
}





歡迎光臨 中央論壇 - CENTER BBS (https://mail.centerbbs.com/) Powered by Discuz! X3