模拟题poj-1677-Girls' Day
暑假集训第一周便是模拟题专题练习,模拟题的代码好长啊,有时自己看自己的代码都会迷糊。
#include<stdio.h>
#include<string.h>
int find(char *a,char *b)//b是目标字符串,a是wish
{
int i,j,count,flag,alen,blen;
alen=strlen(a);
blen=strlen(b);
flag=0;
for(i=0;i<alen;i++)
{
count=0;
for(j=0;j<blen;j++)
{
if(b[j]==a[i+j])
count++;
}
if(i>0&&count==blen&&((a[i-1]==' '||a[i-1]=='!')&&(a[i+j]==' '||a[i+j]=='!')))
flag=1;
else if(i==0&&count==blen&&(a[i+j]==' '||a[i+j]=='!'))
flag=1;
}
return flag;
}
void change(char *wish)//记得要把wish变成小写,这样方便判断
{
int i,len;
len=strlen(wish);
for(i=0;i<len;i++)
if(wish[i]>='A'&&wish[i]<='Z')
wish[i]+=32;
}
int ren[6];//这是用来记录wish中有哪个人名的
char name[6][30];
char str[500];
char str1[10]={"beautiful"},str2[7]={"pretty"},str3[7]={"lovely"};
int main()
{
int g,w,i,Flage;
while(~scanf("%d %d",&g,&w))
{
for(i=0;i<g;i++)
scanf("%s",name[i]);
getchar();
while(w--)
{
int nword=0,slen;
gets(str);
Flage=0;
change(str);
memset(ren,0,sizeof(ren));//记得每次都要把这个数组清零
for(i=0;i<g;i++)
ren[i]=find(str,name[i]);
for(i=0;i<g;i++)
{
if(ren[i])
{
if(Flage>0)
printf(" %s",name[i]);
else
printf("%s",name[i]);
Flage++;
}
}
if(Flage==0)
printf("All");
printf(": ");
slen=strlen(str);
for(i=0;i<slen;i++)
if((str[i]>='a'&&str[i]<='z')&&(str[i+1]==' '||str[i+1]=='!'))
nword++;
if(nword<=9) printf("oh\n");
if(nword>=10)
{
if(find(str,str1)||find(str,str2)||find(str,str3))
printf("xixi\n");
else printf("hehe\n");
}
}
}
return 0;
}