Call me father
1.题目
2.分析
第一想法,用结构体分别写入数据
后来发现直接字符数组即可
3.代码
第一次尝试:(❌)[未考虑读取到文件末尾]
#include <stdio.h>
#include <string.h>
struct Team
{
char Name[4][100]; //名字
char Words[4][100];
};
int main()
{
struct Team team;
char Mode[10];
int i;
int signal = 0, flag = 0, temp = 0;
scanf("%s", Mode); //输入模式
if (strcmp(Mode, "RANDOM") == 0) //匹配
signal = 1;
for (i = 0; i < 4; i++)
{
scanf("%s", team.Name[i]); //名字
scanf("%s", team.Words[i]); //话语
if (strcmp(team.Name[i], "IMfather") == 0 && strcmp(team.Words[i], "Callmefather") == 0) //标记father
flag = 1;
if (strcmp(team.Name[i], "girl") == 0 && strcmp(team.Words[i], "father") == 0)
temp = 1; //记录
}
if (signal) //匹配的时候和女孩保持队形
{
if (flag && temp) //有父亲
printf("father");
else
printf("hello");
}
else //排位时。看队友需求
{
if (flag)
printf("father");
else
printf("hello");
}
return 0;
}
优化:(√)
#include <stdio.h>
#include <string.h>
struct Team
{
char Name[4][100]; //名字
char Words[4][100];
};
int main()
{
struct Team team;
char Mode[50];
while (scanf("%s", Mode)!=EOF)
{
int i;
int signal = 0, flag = 0, temp = 0;
if (strcmp(Mode, "RANDOM") == 0) //匹配
signal = 1;
for (i = 0; i < 4; i++)
{
scanf("%s", team.Name[i]); //名字
scanf("%s", team.Words[i]); //话语
if (strcmp(team.Name[i], "IMfather") == 0 && strcmp(team.Words[i], "Callmefather") == 0) //标记father
flag = 1;
if (strcmp(team.Name[i], "girl") == 0 && strcmp(team.Words[i], "father") == 0)
temp = 1; //记录
}
if (signal) //匹配的时候和女孩保持队形
{
if (flag && temp) //有父亲
printf("father\n");
else
printf("hello\n");
}
else //排位时。看队友需求
{
if (flag)
printf("father\n");
else
printf("hello\n");
}
}
return 0;
}
第二次尝试:(❌)[RANDOM 写成了 Random]
#include <stdio.h>
#include <string.h>
int main()
{
char Mode[50], Person[50], Words[50];
while (scanf("%s", Mode) != EOF)
{
int i, flag = 0, signal = 0, temp = 0; //每一次重新置为0
if (strcmp(Mode, "Random") == 0)
signal = 1;
for (i = 0; i < 4; i++)
{
scanf("%s %s", Person, Words);
if (strcmp(Person, "IMfather") == 0 && strcmp(Words, "Callmefather") == 0)
flag = 1;
if (strcmp(Person, "girl") == 0 && strcmp(Words, "father") == 0)
temp = 1;
}
if (signal) //匹配
{
if (flag && temp)
printf("father\n");
else
printf("hello\n");
}
else
{
if (flag)
printf("father\n");
else
printf("hello\n");
}
}
return 0;
}
第三次(√):考虑全乎
#include <stdio.h>
#include <string.h>
int main()
{
char Mode[50], Person[50], Words[50];
while (scanf("%s", Mode) != EOF)
{
int i, flag = 0, signal = 0, temp = 0; //每一次重新置为0
if (strcmp(Mode, "RANDOM") == 0)
signal = 1;
for (i = 0; i < 4; i++)
{
scanf("%s %s", Person, Words);
if (strcmp(Person, "IMfather") == 0 && strcmp(Words, "Callmefather") == 0)
flag = 1;
if (strcmp(Person, "girl") == 0 && strcmp(Words, "father") == 0)
temp = 1;
}
if (signal) //匹配
{
if (flag && temp)
printf("father\n");
else
printf("hello\n");
}
else
{
if (flag)
printf("father\n");
else
printf("hello\n");
}
}
return 0;
}
3.总结
这道题,从拿到手到AC用了三个小时
反思:
题目本身的难度并不算高,但是主要是算法未考虑清楚,太着急做题,思路不清晰
齐次,注意题目给出的符号,不要自己臆想(复制粘贴)
4.更新日志
2022.3.20 整理