2012-03-07

模擬對號程式

主要功能說明:
模擬對號的小程式, 此程式採用 1 ~ 45 之內的六個數字.
先輸入得獎號碼, 接著再輸入有幾組要對號, 並陸續一組一組地把六個號碼輸入, 當輸入完畢後會直接顯示每一組對中了幾組號碼.

#include<iostream>
using namespace std;

//檢測錯誤函數 
int chkwrong(int chk[],int k)
{
      int i,j; 

      for (i=0; i<6; i++)  //檢查輸入範圍是否在 1~45,及是否超過六組號碼 

           if (chk[i]>45 || chk[i]<1 || k!=10) return 1;     

        for (i=0; i<5; i++)  //檢查是否輸入重複的號碼

              for (j=i+1; j<6; j++)   

                   if (chk[i]==chk[j]) return 1; //傳回 1 表示錯誤

    return 0; //傳回 0 表示正常無誤      

}


int main()
{

       int i,j,p=0;     //變數 p 用來檢測輸入是否超過 

       int sixnum[6];   //sixnum[6]為測試是否輸入超過六組號碼 

       int buy[255][7]; //買幾組 255 為最大,第二維的第[7]個用來存放中了幾個號碼  

       cout << "輸入此回合得獎的 6 個號碼: " << endl;

       for(i=0;i<6;i++)

            cin >> sixnum[i];

       p=cin.get(); //當 p 的值為 10,表示輸入為正常六個號碼 

       if(chkwrong(sixnum,p)==1) //呼叫 chkwrong() 函數,檢測錯誤 

       {

             cout << endl << "錯誤" << endl;

       system("PAUSE"); return 0;                         

    } 

       cout << endl << "輸入你總共有幾組號碼: ";

    cin >> j;    //此處變數 j 代表有幾組 

       int temp[6]; //暫存陣列,暫時存放每組的號碼,供測試輸入錯誤用 

       for (i=0; i<j; i++)

       {

            cout << endl << "輸入你要對號的 6 個號碼: (第 " << i+1 << " 組)" << endl;             

            for(int m=0;m<6;m++)              

            {  

                 cin >> buy[i][m]; 

                 temp[m]=buy[i][m]; 

            }

            p=cin.get();  

            if(chkwrong(temp,p)==1) //呼叫 chkwrong() 函數,檢測錯誤 

      {

                  cout << endl << "錯誤" << endl;

                  system("PAUSE"); return 0;                         

            } 

            for (int k=0; k<6; k++) //比對六個號碼,中幾號

                 for (int n=0; n<6; n++)

                      if(sixnum[k]==buy[i][n]) 

                           buy[i][6]+=1; //每比對成功一個號碼就累加 1 到 buy[][6] 中 

       }



   //以泡沫排序法由大到小,比對buy[][6]陣列的最後一維(中幾號) 

   for (i=0; i<j-1; i++) 

            for (int k=i+1; k<j; k++)

                 if(buy[i][6]<=buy[k][6]) 

             swap(buy[i][6],buy[k][6]); //swap()函數為交換兩數 

              cout << endl << "結果為: " << endl;    

              for(i=0;i<j;i++) 

                   cout << buy[i][6] << " ";

              cout << endl;

   system("PAUSE"); 

   return 0; 

}


操作說明 :
輸入號碼時可以在一行中以空白隔開每一個數字號碼 , 例如 ;
12 33 03 45 19 20 (接著按 Enter) 可以不必按照順序輸入號碼

程式細部修改 :
你也可以修改 int chkwrong(int chk[],int k) 函式內的 if (chk[i]>45 || chk[i]<1 || k!=10) return 1; 這一行的數值 45, 可以改變號碼的上限.

沒有留言:

張貼留言

搜尋此網誌