http://www.bnuoj.com/bnuoj/problem_show.php?pid=1437
这个题首先要输入一个字典,来说明字典里面有什么数据。用XXXXXXX结束字典输入,然后再输入数据,并在字典里面找有没有字母相同的(顺序可以不相同),并输出这个单词,如果有多个,则按照字典序输出。
我WA代码,不知道原因,感觉没错。。下面还有一个AC了的代码
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
struct Node
{
char d[110];
}dic[500];
bool cmp(Node a, Node b)
{
return strcmp(a.d,b.d)<0;
}
int main()
{
char s[110];
int n,i,j,k,len1,len2,p,yn;
i = 0;
while(1)//输入字典
{
scanf("%s",&dic[i].d);
n = i;
len2 = strlen(dic[i].d);
for(j = 0; j < len2; j++)
{
if(dic[i].d[j]!='X')
{
break;
}
}
if(j == len2)
{
break;
}
i++;
}
sort(dic,dic+n,cmp);
while(1)
{
yn = 1; //标记是否找到有相同的存在。
scanf("%s",&s);
len1 = strlen(s);
for(j = 0; j < len1; j++)
{
if(s[j]!='X')
{
break;
}
}
if(j == len1)
{
break;
}
for(i = 0; i < n; i++)
{
len2 = strlen(dic[i].d);
if(len1 == len2)
{
p = 0;
for(j = 0; j < len1; j++) //一个字母一个字母对比
{
for(k = 0; k < len2; k++)
{
if(s[j] == dic[i].d[k])
{
p++;
}
}
if(p == len1)//如果能找到相同的
{
yn = 0; //标记存在相同的数据
printf("%s\n",dic[i].d);
}
}
}
}
if(yn)
{
printf("NOT A VALID WORD\n");
}
printf("******\n");
}
return 0;
}
AC代码:
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
struct Node
{
char s[220]; //这个单词字母按字典序排序后的数据,方便后面对比
char cha[220]; //记录原来的数据
}p[120];
bool cmp(Node a,Node b) //把整个字典按字典序排序
{
return strcmp(a.cha,b.cha)<0;
}
int main()
{
char str[220];
int k;
while(scanf("%s",str)!=EOF)
{
k=0;
while(strcmp(str,"XXXXXX")!=0)
{
strcpy(p[k].cha,str);
int len=strlen(str);
sort(str,str+len);
strcpy(p[k++].s,str);
scanf("%s",str);
}
sort(p,p+k,cmp); //把字典按字典序排序
while(scanf("%s",str)==1&&strcmp(str,"XXXXXX")!=0)
{
int f=0;
sort(str,str+strlen(str));
for(int i=0;i<k;i++)
{
if(strcmp(str,p[i].s)==0) //对比数据,相同则输出
{
f++; //标记是否存在字母相同的
printf("%s\n",p[i].cha);
}
}
if(f==0) printf("NOT A VALID WORD\n");
printf("******\n");
}
}
return 0;
}