看题目的时候,我在想一个问题,这个问题的字母的大小写是不是等价的当看到第一个样例后就会知道,这个问题的大小写也是的等价的。 对于一个字符串中重复出现的单词,不进行重复计数。还有就是尽量把数组定义的大一些,否则会出先runtime error。
下面是我的代码:
#include <stdio.h>
#include <string.h>
int main()
{
int i,j,n,m,s,t,x,z,max,l,flag,key,l1,v;
char s1[100][100],s2[100][10000],s3[100];
int a[100],b[100];
flag=1;
while(scanf("%d %d",&n,&m)!=EOF)
{
getchar();
t=0;
for(i=0;i<=n-1;i++)
{
gets(s1[i]);
a[i]=1;
}
for(i=0;i<=m-1;i++)
{
gets(s2[i]);
l=strlen(s2[i]);
s2[i][l]='.';
s2[i][l+1]='\0';
}
max=0;
for(i=0;i<=m-1;i++)
{
for(j=0;j<=n-1;j++)
{
a[j]=1;
}
l=strlen(s2[i]);
x=0;
s=0;
key=0;
for(j=0;j<=l-1;j++)
{
if(s2[i][j]>='a'&&s2[i][j]<='z'||s2[i][j]>='A'&&s2[i][j]<='Z')
{
s3[x]=s2[i][j];
x+=1;
key=1;
}else if(key==1)
{
key=0;
s3[x]='\0';
for(z=0;z<=n-1;z++)
{
l1=strlen(s1[z]);
if(x==l1)
{
for(v=0;v<=l1-1;v++)
{
if(s3[v]>='a'&&s3[v]<='z')
{
if(s3[v]==s1[z][v]||s3[v]-32==s1[z][v])
{
;
}else
{
break;
}
}else if (s3[v]>='A'&&s3[v]<='Z')
{
if(s3[v]==s1[z][v]||s3[v]+32==s1[z][v])
{
;
}else
{
break;
}
}
}
if(v==l1&&a[z]==1)
{
s+=1;
a[z]=0;
}
}
}
x=0;
}
}
if(s>=max)
{
if(s>max)
{
t=0;
b[t]=i;
t+=1;
}else if(s==max)
{
b[t]=i;
t+=1;
}
max=s;
}
}
printf("Excuse Set #%d\n",flag);
flag+=1;
for(i=0;i<=t-1;i++)
{
l=strlen(s2[b[i]]);
for(j=0;j<=l-2;j++)
{
printf("%c",s2[b[i]][j]);
}
printf("\n");
}
printf("\n");
}
return 0;
}