zoj 1315 Excuses, Excuses!
题意:简单题,读懂题目就很好写了,这里要说的是,题目并没有叙述每句话里的单词长度是多少,所以导致我的数组开小了,一直SF,后来把数组开大后就A了
先给出一组单词,然后在给出几个句子,输出包含给定单词数量最多的句子。这次考验基础,就是单词与单词的分隔不仅仅只是空格还有别的符号
#include<stdio.h> #include<string.h> struct Node { char key[21]; }node[21]; struct Ans { char ss[100]; int count; }ans[21]; void Str2str(char ss[]) { for (int i=0;ss[i];i++) { if(ss[i]>='A' && ss[i]<='Z') ss[i]+=32; } } int main() { int n,k,i,j,t; char word[100];//储存句子中的单词,数组一定要开大 int tes=1; while(scanf("%d%d",&n,&k)!=EOF) { int max=0; getchar(); memset(ans,0,sizeof(ans)); for (i=0;i<n;i++) { gets(node[i].key); } int cas=0; int flag=0; for (i=0;i<k;i++)//有几句话 { gets(ans[i].ss); int leng=strlen(ans[i].ss); for (j=0;j<=leng;j++)//找有几个单词 { if((ans[i].ss[j]<'A' || ans[i].ss[j]>'z' || (ans[i].ss[j]>'Z' && ans[i].ss[j]<'a') || j==leng) && flag==1)//判断是否已经构成一个新单词 { flag=0; word[cas]='\0'; cas=0; Str2str(word); for (t=0;t<n;t++) { if(!strcmp(word,node[t].key)) ans[i].count++; } } else { word[cas++]=ans[i].ss[j]; flag=1; } } if(ans[i].count>max) max=ans[i].count; } printf("Excuse Set #%d\n",tes++); for (i=0;i<k;i++) { if(ans[i].count==max) printf("%s\n",ans[i].ss); } printf("\n"); } return 0; }