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;
}

   

運行: