这种字符串的题一定要仔细,不然很容易WA。。。
我开始的一种方法不是处理dictionary和sortDis,而是每次都搜索一次,到现在我都还没找到为什么错了。。。
后一种代码就是先处理dictionary和sortDis,之后就容易处理了
AC的代码:
#include <stdio.h>
#include <string.h>
#include <iostream>
#include <algorithm>
using namespace std;
char dictionary[102][10]; //1~100词,每个词1~6字母
char sortDic[102][10]; //排序以后的字典
int dicNum; //字典中词的个数
int main()
{
//freopen("test.txt","r",stdin);
char tmp[7];
int i;
//输入字典,从下标0开始 ok
for(i=0; ;i++)
{
scanf("%s",tmp);
if(strcmp(tmp,"XXXXXX")==0)
break;
strcpy(dictionary[i],tmp);
}
dicNum=i;
//处理dictionary和sortDic
int j;
for(i=0;i<dicNum;i++)
for(j=0;j<dicNum;j++)
if(strcmp(dictionary[i],dictionary[j])<0)
{
strcpy(tmp,dictionary[j]);
strcpy(dictionary[j],dictionary[i]);
strcpy(dictionary[i],tmp);
}//字典顺序已经排好
//test
/*for(i=0;i<dicNum;i++)
printf("%s\n",dictionary[i]);*/
for(i=0;i<dicNum;i++) //排sortDic
{
strcpy(sortDic[i],dictionary[i]);
sort(sortDic[i],sortDic[i]+strlen(sortDic[i]));
}
//输入待排序数
while(scanf("%s",tmp))
{
if(strcmp(tmp,"XXXXXX")==0)
return 0;
sort(tmp,tmp+strlen(tmp));
int count=0;
for(i=0;i<dicNum;i++)
if(strcmp(tmp,sortDic[i])==0) //相等就标记一下
{
printf("%s\n",dictionary[i]);
count++;
}
if(count==0)
{
printf("NOT A VALID WORD\n");
printf("******\n");
continue;
}
printf("******\n");
}
return 0;
}
一直WA的代码:
#include <stdio.h>
#include <string.h>
#include <iostream>
#include <algorithm>
using namespace std;
char dictionary[102][7]; //1~100词,每个词1~6字母
char sortDic[102][7]; //排序以后的字典
int dicNum; //字典中词的个数
int flag[102];
int main()
{
//freopen("test.txt","r",stdin);
char tmp[7];
int i;
//输入字典,从下标1开始 ok
for(i=1; ;i++)
{
scanf("%s",tmp);
if(strcmp(tmp,"XXXXXX")==0)
break;
strcpy(dictionary[i],tmp);
strcpy(sortDic[i],tmp);
sort(sortDic[i],sortDic[i]+strlen(tmp));
}
dicNum=i-1;
//test
/*for(i=1;i<=dicNum;i++)
printf("%s\n",dictionary[i]);*/
//test
/*for(i=1;i<=dicNum;i++)
printf("%s\n",sortDic[i]);*/
//输入待排序数
while(scanf("%s",tmp))
{
if(strcmp(tmp,"XXXXXX")==0)
return 0;
//init flag
memset(flag,0,sizeof(flag));
sort(tmp,tmp+strlen(tmp));
int count=0;
for(i=1;i<=dicNum;i++)
if(strcmp(tmp,sortDic[i])==0) //相等就标记一下
{
flag[i]=1;
count++;
}
if(count==0)
{
printf("NOT A VALID WORD\n");
printf("******\n");
continue;
}
//开始正式输出
int pos=1;
while(1)
{
strcpy(tmp,"zzzzzz");
//tmp必然是选出来最靠前的
for(i=1;i<=dicNum;i++)
{
if(flag[i]==1 && strcmp(tmp,dictionary[i])>0) //tmp字典序靠后
{
strcpy(tmp,dictionary[i]);
pos=i;
}
}
if(count==0)
break;
else
{
printf("%s\n",tmp);
count--;
flag[pos]=0; //改回去
}
}
printf("******\n");
}
return 0;
}