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

[教學] 樂透彩系列範列

[複製鏈接]
跳轉到指定樓層
1#
發表於 2007-9-4 09:06:28 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
#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
}
您需要登錄後才可以回帖 登錄 | 註冊

本版積分規則

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


Page Rank Check

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

手機版|中央論壇

GMT+8, 2026-8-6 16:59 , Processed in 0.036865 second(s), 16 queries .

Powered by Discuz!

© 2005-2015 Copyrights. Set by YIDAS

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