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; }
运行: