AC代碼:
flag 既記錄中將號碼個數,即中幾等獎;同時又做 buf 數組下標。一值雙用。
buf 數組定義長度爲8,flag = 7時,表示中特等獎,同時賦值給 buf [ flag ];flag = 0時,表示未中獎,將 buf [ flag ]賦值爲0。所以buf數組下標1—7,記錄一等獎~特等獎中將次數。
#include<stdio.h>
#include<string.h>
int main(){
int n, a[7], b[1005][7]; // 數組 a 記錄中獎號碼 ,二維數組 b 記錄每張彩票號碼
scanf("%d", &n);
for(int i=0; i<7; i++){
scanf("%d", &a[i]);
}
for(int i=0; i<n; i++){ //輸入量不大,採用7個 scanf 語句讀入,降低複雜度
scanf("%d", &b[i][0]);
scanf("%d", &b[i][1]);
scanf("%d", &b[i][2]);
scanf("%d", &b[i][3]);
scanf("%d", &b[i][4]);
scanf("%d", &b[i][5]);
scanf("%d", &b[i][6]);
}
int buf[8]; //buf 記錄7個獎項中,每個獎項中獎張數
memset(buf, 0, sizeof(buf)); //將數組 buf 全部置 0
for(int i=0; i<n; i++){ //循環遍歷 n 張
int flag = 0; // flag 記錄有幾個相同號碼,同時做 buf 下標
for(int j=0; j<7; j++){ // j 是中獎號碼數組 a 的下標
if(b[i][j] == a[0]) flag += 1;
if(b[i][j] == a[1]) flag += 1;
if(b[i][j] == a[2]) flag += 1;
if(b[i][j] == a[3]) flag += 1;
if(b[i][j] == a[4]) flag += 1;
if(b[i][j] == a[5]) flag += 1;
if(b[i][j] == a[6]) flag += 1;
}
buf[flag] += 1; //flag = 7 時表示特等獎; flag = 0 表示沒有中獎
}
printf("%d ", buf[7]);
for(int i=6; i>0; i--){
printf("%d ", buf[i]);
}
return 0;
}