PTA 2022跨年赛第四题 C

前言

2022开局,参加PTA跨年挑战赛: 

我真是个蒟蒻,真的,我单知道自己是个蒟蒻,没想到自己弱得……弱得我想痛骂自己:

你个头脑混乱连题都审不灵清的菜狗!还不沉下心来,Deep Learning !!!

痛定思痛,总结如下:

  1. 有限时间,“急”为大忌。
  2. 审题仔细,思路清晰。
  3. 勿着急敲代码,先正确翻译完题中关键信息,减少大量删改。

做任何事情,首先修心,心如止水。

我的进步空间十分之大,我要每天进步一点点!

2022,踏实,厚积。


题干

根据代码,简单回忆(可能有不同):

问题描述

小花每周都会买三张固定号码的彩票。彩票号码为四位正整数。每周都会公布中奖号码,中奖情况如下(购买号码和中奖号码相比较):

一等奖 —— 各位都相同

二等奖 —— 个、十、百位相同,千位不同

三等奖 —— 个、十位相同,百位不同

四等奖 —— 个位相同,十位不同

五等奖 —— 个位不同

请你输出 n(0<n<=100)周后,小花能获得的最高奖项(一等奖为最高)。

输入要求

第一行 n,n周

接下来n行输入每周的中奖号码

接下来3行输入小花的三组固定号码

输出要求

输出 n周后,小花能获得的最高奖项

一等奖 —— YiDengJiang!!!

二等奖 —— ErDengJiang

三等奖 —— SanDengJiang

四等奖 —— SiDengJiang

五等奖 —— WuDengJiang
   

输入数据

4

1234

2345

3456

4567

0987

0986

0985

输出数据

SiDengJiang

解析

重要因素

  1. 字符串的输入,记得 getchar() 解决回车
  2. 判断思路是五等奖到一等奖

解答

1.0 当时AC的LOW代码

#include<stdio.h>
int main(){
	int n,i,j,get=5,min=5,temp;
	char a[5],b[5],c[5];
	char awa[101][5];
	scanf("%d",&n);
	getchar();
	for(i=0;i<n;i++){
		scanf("%c%c%c%c",&awa[i][0],&awa[i][1],&awa[i][2],&awa[i][3]);
		getchar();
	}
	scanf("%c%c%c%c",&a[0],&a[1],&a[2],&a[3]);getchar();
	scanf("%c%c%c%c",&b[0],&b[1],&b[2],&b[3]);getchar();
	scanf("%c%c%c%c",&c[0],&c[1],&c[2],&c[3]);
//	for(i=0;i<n;i++){
//		printf("%c%c%c%c\n",awa[i][0],awa[i][1],awa[i][2],awa[i][3]);
//	}
	for(i=0;i<n;i++){
		while(1){
			if(a[3]!=awa[i][3]){
				get=5;
				break;
			}
			else{
				if(a[2]!=awa[i][2]){
					get=4;break;
				}
				else{
					if(a[1]!=awa[i][1]){
						get=3;break;
					}
					else{
						if(a[0]!=awa[i][0]){
							get=2;break;
						}
						else{
							get=1;break;
						}
					}
				}
			}
		}
		if(get<min){
			temp=get;
			get=min;
			min=temp;
		}
	}
		for(i=0;i<n;i++){
		while(1){
			if(b[3]!=awa[i][3]){
				get=5;
				break;
			}
			else{
				if(b[2]!=awa[i][2]){
					get=4;break;
				}
				else{
					if(b[1]!=awa[i][1]){
						get=3;break;
					}
					else{
						if(b[0]!=awa[i][0]){
							get=2;break;
						}
						else{
							get=1;break;
						}
					}
				}
			}
		}
		if(get<min){
			temp=get;
			get=min;
			min=temp;
		}
	}
		for(i=0;i<n;i++){
		while(1){
			if(c[3]!=awa[i][3]){
				get=5;
				break;
			}
			else{
				if(c[2]!=awa[i][2]){
					get=4;break;
				}
				else{
					if(c[1]!=awa[i][1]){
						get=3;break;
					}
					else{
						if(c[0]!=awa[i][0]){
							get=2;break;
						}
						else{
							get=1;break;
						}
					}
				}
			}
		}
		if(get<min){
			temp=get;
			get=min;
			min=temp;
		}
	}
	if(min==1) printf("YiDengJiang!!!");
	if(min==2) printf("ErDengJiang");
	if(min==3) printf("SanDengJiang");
	if(min==4) printf("SiDengJiang");
	if(min==5) printf("WuDengJiang");
	return 0;
}

2.0 函数调用一维数组(未经OJ)

#include<stdio.h>
char a[4][5];
char awa[101][5];
int n,i,j,get=5,min=5,temp;
void search(char a[], char awa[]);
int main(){
	scanf("%d",&n);getchar();
	for(i=0;i<n;i++){
		scanf("%c%c%c%c",&awa[i][0],&awa[i][1],&awa[i][2],&awa[i][3]);getchar();
	}
	for(i=0;i<3;i++){
		scanf("%c%c%c%c",&a[i][0],&a[i][1],&a[i][2],&a[i][3]);getchar();
	}
	for(i=0;i<3;i++){
		for(j=0;j<n;j++){
			search(a[i],awa[j]);
		}
	}
	switch(min){
		case 1: printf("YiDengJiang!!!");break;
		case 2: printf("ErDengJiang");break;
		case 3: printf("SanDengJiang");break;
		case 4: printf("SiDengJiang");break;
		case 5: printf("WuDengJiang");break;
	}
	return 0;
}
void search(char a[], char awa[]){
	while(1){
		if(a[3]!=awa[3]){
			get=5;break;
		}
		else{
			if(a[2]!=awa[2]){
				get=4;break;
			}
			else{
				if(a[1]!=awa[1]){
					get=3;break;
				}
				else{
					if(a[0]!=awa[0]){
						get=2;break;
					}
					else{
						get=1;break;
					}
				}
			}
		}
	}
	if(get<min){
		temp=get;
		get=min;
		min=temp;
	}
}

3.0 函数调用二维数组(未经OJ)

函数片段

search(a,awa,3,n);        // in main function
void search(char a[][5], char awa[][5], int r1, int r2){
	for(i=0;i<r1;i++){
		for(j=0;j<r2;j++){
			while(1){
				if(a[i][3]!=awa[j][3]){
					get=5;break;
				}
				else{
					if(a[i][2]!=awa[j][2]){
						get=4;break;
					}
					else{
						if(a[i][1]!=awa[j][1]){
							get=3;break;
						}
						else{
							if(a[i][0]!=awa[j][0]){
								get=2;break;
							}
							else{
								get=1;break;
							}
						}
					}
				}
			}
			if(get<min){
				temp=get;
				get=min;
				min=temp;
			}
		}
	}
}

拓展

其实,蒟蒻的我只是想练习 通过函数调用数组。目前指针用不太熟 and 这块内容掌握也不大好。

不过我会加油的!

函数调用数组,我网上看不太明白,建议还是读读经典《C Primer Plus》(第六版)。书上讲得很明白,我一下就悟了。—— 10.7.3 函数和多维数组

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值