作为一个刚学C语言的小趴菜,3个小时的比赛只做了2个题,就简单分享一下签到题C的解题思路。
题目描述
2022年8月24日,伟大的EternalAlexander发问
“什么是ACM?”
聪明的zech当然知道ACM是什么,但是他不想直接告诉EA,于是zech给出了两个长度为nnn的只包含大写字母的字符串SSS和TTT,让EA自己去寻找答案。
什么是ACM?这个答案隐藏在SSS串中。为了不让EA找到答案,zech在SSS串中加入了很多无用的信息来误导EA!而找到其中关键信息的方法就是使用TTT串。
具体来说,设字符串SSS的第iii个字符为SiS_iSi,字符串TTT的第iii个字符为TiT_iTi,那么SiS_iSi是关键信息当且仅当Ti∈{′A′,′C′,′M′}T_i\in\left\{'A','C','M'\right\}Ti∈{′A′,′C′,′M′}。
例如,当
时,关键信息就是"ELECTRONIC"和"SPORTS"(不含引号)。
伟大的EA并不知道怎么找到SSS中的关键信息,于是出成了题来考你们,你能帮帮他吗?
为了方便EA查看关键信息,请你将所有连续的关键信息作为一个字符串整体输出,字符串之间间隔一个空格,注意第一个字符串的开头和最后一个字符串的结尾不要有空格,在上面的例子中,你的输出应该是“ELECTRONIC SPORTS”(不含引号)。
输入描述:
第一行一个正整数,表示字符串的长度n(1≤n≤103)n(1\le n\le 10^3)n(1≤n≤103); 第二行一个只含大写字母的字符串SSS; 第三行一个只含大写字母的字符串TTT。
输出描述:
一行,一个字符串,表示从SSS串中提取的关键信息,保证输出不为空。
示例1
输入
25 BBQELECTRONICABCSPORTSFFT PPPACMACMACMCBDEMACCAMTTT
25 BBQELECTRONICABCSPORTSFFT PPPACMACMACMCBDEMACCAMTTT
输出
ELECTRONIC SPORTS
ELECTRONIC SPORTS
解题思路
利用循环一一判断两组字S,T每个位置上字符的对应情况,只需判断每个Si,是不是对应ACM,以及上一个位置,是不是对应ACM,如果上一个不是则输出空格,如果时则输出Si,就能输出连续的字符串
代码
#include<stdio.h>
int main()
{ int n,i,j;
char S[10000];
char T[10000];
//定义两个数组存输入的两行字符串
scanf("%d",&n);
//输入字符串长度
scanf("%s",S);
scanf("%s",T);
//输入两个字符串
for(j=0;j<n;j++)
{
if(T[j]=='A'||T[j]=='C'||T[j]=='M')
{
printf("%c",S[j]);
}
else
{
if(T[j-1]=='A'||T[j-1]=='C'||T[j-1]=='M')
{
printf(" ");
}
}
//利用循环将两组字符串一一对比,如果T组为A,C,M,则输出对应S组字符
//若该T组上一位为A,C,M时输出空格
//这样就可以将对应字符串分开输出
}
return 0;
}