close
樂透程式 這篇文章中 哆啦a夢Sammy  問道 : 

我想問如果要自己輸入六個號碼...然後程式裡面也會產生隨機六個號碼...

輸出為相同的號碼有幾個並列出來...這個要怎麼寫??
 


我稍微寫了一下程式提供參考

解釋 :
我宣告了一些東西 a 陣列是存使用者輸入的數字 , b陣列是暫存電腦隨機選出來的數字
c陣列是暫存,a和b陣列中相同的元素 ,
check陣列是去判段電腦選號的過程中有沒有選到重複的陣列 , 一開始都存0 , 
假如選到 6 號 check[6]就會被設成 1 ,這樣下次如果又選到6號 , 那就重選

所以整個程式的流程是這樣
一開始要使用者輸入數字
把這些數字存在a[ ]
再來利用電腦亂數選取
亂數要利用到rand()函式
用法就請參考教科書
或是揣摩別人程式中的寫法
取完以後存放在b[ ]
在選取中利用 do..while
如果重複選取就重選...
要做到這件事的方法應該不只一種
我只是寫了比較好寫的寫法

接著比較 a b 兩陣列是否有相同的元素
每找到一個 same + 1
於是如果same = 0 代表沒有任何相同的數字

最後再把相同的數字印出來
如果有不清楚或說漏的地方可以再提出來討論
作用環境於dev c++5.0
試過一些case都還滿正常的..
如果想測電腦是不是選到一樣的會重選
可以把maxnum先設小一點就可以知道
因為設太大本來就很難重複

#include <cstdlib>
#include <iostream>
#define maxnum 49 // 這個是彩球數目的意思 數字可以自己改
using namespace std;

int main(int argc, char *argv[])
{
   
    int a[6],b[6],c[6],i,j;
    int same=0;
    int check[maxnum+1] = {0};
    srand(time(NULL));
    cout << "請輸入六個號碼: "<< endl;
    for(i=0;i<6;i++){
      printf("第 %d 個號碼: ",i+1);
      cin >> a[i];     
    }
    cout << endl;
    // 電腦隨機選六個號碼
    cout << "電腦選出了: ";
    for(i=0;i<6;i++){
      do{
      b[i]= rand()%maxnum + 1;
      j = b[i];
      }while(check[j]!=0);
      check[j]=1;
      cout << b[i] <<" ";
    }
    cout << endl;
   
    //找出相同的號碼
   
    for(i=0;i<6;i++){
      for(j=0;j<6;j++){
      if(b[i]==a[j]){
      c[same]=a[j];
      same++;
      }
      }
    }
   
    //列出相同的號碼
    if(same==0) cout<<"沒有相同的號碼"<<endl;
    else{
         cout<< "相同的有: ";
         for(i=0;i<same;i++){
         cout << c[i] <<" ";
         }
         cout <<endl;
         }
   
    cout << endl;
    system("PAUSE");
    return EXIT_SUCCESS;
}

arrow
arrow
    全站熱搜

    偽新聞新聞雜誌 發表在 痞客邦 留言(3) 人氣()