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