c 語言彩票選號
- 2022 年 5 月 21 日
- 筆記
最近剛學了c語言,就做了個彩票選號程序練手玩玩,做的不好請見諒
1.分為前區(1-35)和後區(1-12)號碼
2.先循環隨機前區號在循環後區號
3.生成隨機時數判斷是否有重複值,和之前5期是否出現過
4.有重複值或出現過都重新隨機
5.排序輸出
文件:daletou.c
#include<stdio.h> #include<stdlib.h> #include<time.h> #include<string.h> #include<windows.h> #include "5.h" // 大樂透選號 // 前區01—35共三十五個號碼組成,後區號碼由01—12 int getRand(int *,int,int); int * sort(int *,int); void printNum(); int main() { int i,num; time_t t; srand((unsigned int)time(&t)); printf("請輸入要打印的個數:"); scanf("%d",&num); for(i=0;i<num;i++){ printNum(); } system("pause"); return 0; } // 打印號碼 void printNum(){ int i,frontArea[5],backArea[2]; //獲取前區數字 for(i=0;i<5;i++) { frontArea[i] = getRand(frontArea,35,5); // printf("%d ",frontArea[i]); } // 獲取後區數字 for(i=0;i<2;i++) { backArea[i] = getRand(backArea,12,2); // printf("%d ",backArea[i]); } // 前區數字排序 int *arrf = sort(frontArea,5); //將文字設置為紅色 SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 0xe); for(i=0;i<2;i++) { printf("%d ",arrf[i]); } //將文字設置為白色 SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 0x7); printf("\n"); } // 獲取隨機數 int getRand(int *n,int max,int len) { int ret = 0; int j; int k = 0; int *history = len == 5?previousPeriod5:previousPeriod2; // printf("index:%d ",i); ret = rand()%(max+1); ret = ret == 0 ? 1:ret; for(j=0;j<len;j++) { // 判斷當前數是否在往期5期存在 if(exist(ret,len) == 1){ k = 1; break; } // 是否有相同的數 if(ret !=0 && ret == n[j]) { k = 1; break; } } if(k == 1){ getRand(n,max,len); }else{ return ret; } } // 排序 int * sort(int *a,int len) { // static int a[] = {2,1,3,69,7,2,74}; int i,j; // int arrlen = sizeof(a)/sizeof(a[0]);//獲取數組長度 只能用於static或全局數組 因為傳入的數組是個指針 for(i=0;i<len;i++) { for(j=i;j<len;j++){ if(a[i] > a[j]){ a[i] = a[i]^a[j]; a[j] = a[i]^a[j]; a[i] = a[i]^a[j]; } } } return a; }
文件:5.h
// 往期號碼 int previousPeriod5[] = { 1,2,12,15,23, 5,16,21,23,34, 9,17,19,20,25, 1,13,18,29,35, 1,16,17,19,33, }; int previousPeriod2[] = { 4,6, 7,10, 1,9, 4,9, 5,6, }; int exist(int,int); // 判斷當前數是否在往期5期存在 k=1存在 int exist(int ret,int len) { int i,p_len,k=0; int *arr; if(len == 5){ p_len = sizeof(previousPeriod5)/sizeof(previousPeriod5[0]); arr = previousPeriod5; }else{ p_len = sizeof(previousPeriod2)/sizeof(previousPeriod2[0]); arr = previousPeriod2; } for(i=0;i<p_len;i++) { if(ret == arr[i]){ k = 1; } } return k; }
運行: