模擬對號的小程式, 此程式採用 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, 可以改變號碼的上限.
沒有留言:
張貼留言