为了丰富人民群众的生活、支持某些社会公益事业,北塔市设置了一项彩票。该彩票的规则是:
- 每张彩票上印有 7 个各不相同的号码,且这些号码的取值范围为 1∼33。
- 每次在兑奖前都会公布一个由七个各不相同的号码构成的中奖号码。
- 共设置 7 个奖项,特等奖和一等奖至六等奖。
兑奖规则如下:
- 特等奖:要求彩票上7个号码都出现在中奖号码中。
- 一等奖:要求彩票上有6个号码出现在中奖号码中。
- 二等奖:要求彩票上有5个号码出现在中奖号码中。
- 三等奖:要求彩票上有4个号码出现在中奖号码中。
- 四等奖:要求彩票上有3个号码出现在中奖号码中。
- 五等奖:要求彩票上有2个号码出现在中奖号码中。
- 六等奖:要求彩票上有1个号码出现在中奖号码中。
注:兑奖时并不考虑彩票上的号码和中奖号码中的各个号码出现的位置。例如,中奖号码为 23 31 1 14 19 17 18,则彩票 12 8 9 23 1 16 7由于其中有两个号码(23 和 1)出现在中奖号码中,所以该彩票中了五等奖。
现已知中奖号码和小明买的若干张彩票的号码,请你写一个程序帮助小明判断他买的彩票的中奖情况。
对于这题的分析,首先我凭借自己的想法来看的。
首先我们得找个一维数组把中奖号码给录入,然后再定义一个二维数组,输入我们的彩票号码。我们需要做的是,在二维数组中一个个的遍历找到与一维数组号码相同的。这个时候我们再定义一个数组,来判断有几个与中奖号码相同的,输出对应的就是几,这样就满足了我们拿到了一个数组,记录各个奖的数量。再转换成正确的输出格式。现在我们来看看代码部分。
#include<stdio.h>
int main(){
//定义彩票个数n//
int n,i,j,k;
//中奖的号码数组a,输出的格式数组c//
int a[7],c[7]={0};
//s数组表示彩票号码与中奖号码相同的个数//
int s[1000]={0};
int b[1000][7];
scanf("%d",&n);
//录入中奖的号码//
for(i=0;i<7;i++){
scanf("%d",&a[i]);
}
//录入彩票的号码//
for(i=0;i<n;i++){
for(j=0;j<7;j++){
scanf("%d",&b[i][j]);
}
}
//拿中奖号码一个个元素与抽取的号码元素一个个对比,中奖号码的第几位就输出有几位与中奖号码相同//
for(i=0;i<n;i++){
for(j=0;j<7;j++){
for(k=0;k<7;k++){
if(a[j]==b[i][k]){
s[i]+=1;
}
}
}
}
//为了输出的格式正确,将与中奖号码相同的格式,转化为各奖项的数量//
for(i=0;i<7;i++){
for(j=0;j<n;j++){
if(s[j]==7-i){
c[i]++;
}
}
}
for(i=0;i<7;i++){
printf("%d ",c[i]);
}
return 0;
}