閱讀468 返回首頁    go 技術社區[雲棲]


poj 1318 Word Amalgamation

這種字符串的題一定要仔細,不然很容易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;
}


最後更新:2017-04-03 14:53:53

  上一篇:go poj 1298 The Hardest Problem Ever
  下一篇:go Java常用類庫--定時調度(Timer、TimerTask)