蓝桥杯 算法提高 彩票--C语言

`目 1521: [蓝桥杯][算法提高VIP]彩票

时间限制: 1Sec 内存限制: 128MB 提交: 292 解决: 175

题目描述
为丰富男生节活动,贵系女生设置彩票抽奖环节,规则如下:

1、每张彩票上印有7个各不相同的号码,且这些号码的取值范围为[1, 33];

2、每次在兑奖前都会公布一个由七个互不相同的号码构成的中奖号码;

3、共设置7个奖项,特等奖和一等奖至六等奖。兑奖规则如下:

特等奖:要求彩票上的7个号码都出现在中奖号码中;

一等奖:要求彩票上的6个号码出现在中奖号码中;

二等奖:要求彩票上的5个号码出现在中奖号码中;

……

六等奖:要求彩票上的1个号码出现在中奖号码中;

注:不考虑号码出现的顺序,例如若中奖号码为23 31 1 14 19 17 18,则彩票12 8 9 23 1 16 7由于其中有两个号码(23和1)出现在中奖号码中,所以该彩票中了五等奖。

现已知中奖号码和李华买的若干彩票的号码,请你写一个程序判断他的彩票中奖情况。

数据规模和约定

100%的数据n< =100000。

输入
第一行一个正整数n,表示彩票数量,第二行7个整数,表示中奖号码,下面n行每行7个整数,描述n张彩票。

输出
7个空格隔开的数字,第1个数字表示特等奖的中奖张数,第2个数字表示一等奖的中奖张数,第3个数字表示二等奖的中奖张数……第7个数字表示六等奖的中奖张数。

样例输入
3
1 2 3 4 5 6 7
11 12 13 14 15 16 17
12 13 14 15 16 17 18
8 7 10 9 31 30 29

样例输出
0 0 0 0 0 0 1

#include<stdio.h>
#include<math.h>
#include<string.h>
 int dfs(int *zj,int *cp)//统计每张彩票中奖的个数 
 {
    
    
 	int count=0;
 	for(int i=1;i<=7;i++){
    
    
 		for(int j=1;j<=7;j++){
    
      //遍历每一个号码 
 			if(zj[i]==cp[j]){
    
    
 				count++;
 	                	break; //相同直接结束此层循环 
			 }
 			continue;
		 }
	 }
     return count;//返回个数 
  }	

	
 int main()
 {
    
    
 	int n;
 	int zj[10];
 	scanf("%d",&n);
 	int cp[n+1][8];
 	for(int i=1;i<=7;i++)
 	scanf("%d",&zj[i]);
 	for(int i=1;i<=n;i++)
 	{
    
    
 		for(int j=1;j<=7;j++)
 		{
    
    
 			scanf("%d",&cp[i][j]);
		 }
	 }
    int cns[n];//每张彩票中奖数目 
    memset(cns,0,sizeof(cns));//清零 
    int count[8];//彩票张数统计 
 	memset(count,0,sizeof(count));//清零 
	for(int i=1;i<=n;i++)
 	{
    
    
 		cns[i]=dfs(zj,cp[i]);  //递归 
 		switch(cns[i])
 		{
    
    
 			case 7:count[1]+=1;break;//如果单张彩票中奖个数为7这特等奖+1; 
 			case 6:count[2]+=1;break;
 			case 5:count[3]+=1;break;
 			case 4:count[4]+=1;break;
 			case 3:count[5]+=1;break;
 			case 2:count[6]+=1;break;
 			case 1:count[7]+=1;break;
		 }
	}
  for(int i=1;i<=7;i++)
  printf("%d ",count[i]);//全部输出
  return 0; 	
 }

猜你喜欢

转载自blog.csdn.net/qq_46232829/article/details/107634605
今日推荐