#include<stdio.h>
#include<string.h>
#include<ctype.h>
char key[21][50];
char state[21][101];
int k,e;
int fun(char a[])
{
int len=strlen(a);
int count=0;
int m=0;
int i;
char tem[101];
for( i=0;i<len;i++)
{
//把char tem[101]声明在循环内。会WA。但是输出答案正确。why?
if(isalpha(a[i]))
{
tem[m++]=tolower(a[i]);
}
else
{
tem[m]='\0';
int j;
for( j=0;j<k;j++)
{
if(strcmp(tem,key[j])==0) count++;
}
m=0;
}
printf("%s\n",tem);
}
return count;
}
int main()
{
int x=0;
while(scanf("%d%d",&k,&e)==2)
{
x++;
int i,j;
int num[21]={0};
for(i=0;i<k;i++)
{
scanf("%s",key[i]);
}
getchar();
for( i=0;i<e;i++)
{
fgets(state[i],101,stdin);
num[i]=fun(state[i]);
}
int max=num[0];
for( i=0;i<e;i++)
{
if(max<num[i])
{
max=num[i];
}
}
printf("Excuse Set #%d\n",x);
int flag=0;
for( i=0;i<e;i++)
{
if(max==num[i]) printf("%s",state[i]);
}
printf("\n");
}
return 0;
}
好吧。我又参考了别人的方法。= =
这道题提交的时候wa了很多次,后来发现相同的代码用c提交可以ac,但是用c++提交就会wa。坑死了。
还有就是应该避免在循环内声明数组。因为莫名其妙的wa了很久,但不知道为什么,所以尽量避免。
借用别人的总结:
- 对于使用int等基本数据类型作为循环变量,只要你用的优化方面足够给力的主流的编译器,完全不需要关心在循环外还是循环内定义循环变量。
- 如果循环变量本身是复杂的对象,建议在循环外定义好,并且在
for
循环的赋值语句、判断语句中,都要避免重复创建对象。