前言
2022开局,参加PTA跨年挑战赛:
我真是个蒟蒻,真的,我单知道自己是个蒟蒻,没想到自己弱得……弱得我想痛骂自己:
你个头脑混乱连题都审不灵清的菜狗!还不沉下心来,Deep Learning !!!
痛定思痛,总结如下:
- 有限时间,“急”为大忌。
- 审题仔细,思路清晰。
- 勿着急敲代码,先正确翻译完题中关键信息,减少大量删改。
做任何事情,首先修心,心如止水。
我的进步空间十分之大,我要每天进步一点点!
2022,踏实,厚积。
题干
根据代码,简单回忆(可能有不同):
问题描述
小花每周都会买三张固定号码的彩票。彩票号码为四位正整数。每周都会公布中奖号码,中奖情况如下(购买号码和中奖号码相比较):
一等奖 —— 各位都相同
二等奖 —— 个、十、百位相同,千位不同
三等奖 —— 个、十位相同,百位不同
四等奖 —— 个位相同,十位不同
五等奖 —— 个位不同
请你输出 n(0<n<=100)周后,小花能获得的最高奖项(一等奖为最高)。
输入要求
第一行 n,n周
接下来n行输入每周的中奖号码
接下来3行输入小花的三组固定号码
输出要求
输出 n周后,小花能获得的最高奖项
一等奖 —— YiDengJiang!!!
二等奖 —— ErDengJiang
三等奖 —— SanDengJiang
四等奖 —— SiDengJiang
五等奖 —— WuDengJiang
输入数据
4
1234
2345
3456
4567
0987
0986
0985
输出数据
SiDengJiang
解析
重要因素
- 字符串的输入,记得 getchar() 解决回车
- 判断思路是五等奖到一等奖
解答
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 函数和多维数组