UVa156

题目地址:点击打开链接

C++代码:

#include <cstdio>
#include <algorithm>
#include <cstring>
#include <cctype>
using namespace std;
struct MyStruct
{
	char word[30];
	char changed_s[30];
	void change()
	{
		strcpy(changed_s,word);
		int i;
		int len=strlen(word);
		for(i=0;i<len;++i)
			if(isupper(changed_s[i]))
				*(changed_s+i)=tolower(changed_s[i]);

	}
	void sort_changed_s()
	{
		sort(changed_s,changed_s+strlen(changed_s));
	}
};
bool cmp_MS(MyStruct A,MyStruct B)
{
	return strcmp(A.changed_s,B.changed_s)>=0?false:true;
}
const int maxsize=10000;
MyStruct MS[maxsize];
struct MyStruct1
{
	char st[30];
};
MyStruct1 str[maxsize];
bool cmp(MyStruct1 A,MyStruct1 B)
{
	return strcmp(A.st,B.st)>=0?false:true;
}
int main()
{
	char word[30];
	while(true)
	{
		if(scanf("%s",word)==EOF)
			return 0;
		int n=1;
		strcpy(MS[0].word,word);
		MS[0].change();
		MS[0].sort_changed_s();
		while(true)
		{
			scanf("%s",word);
			if(word[0]=='#')
				break;
			strcpy(MS[n].word,word);
			MS[n].change();
			MS[n++].sort_changed_s();
		}
		sort(MS,MS+n,cmp_MS);
		strcpy(word,MS[0].changed_s);
		int i;
		int num=0;
		int k=0;
		if(n==1)
			printf("%s
",MS[0].word);
		else
		{
			for(i=1;i<n;++i)
			{
				if(strcmp(MS[i].changed_s,word)==0)
				{
					++num;
					continue;
				}
				else
				{
					if(num==0)
						strcpy(str[k++].st,MS[i-1].word);
					else
						num=0;
					strcpy(word,MS[i].changed_s);
				}
			}
			if(num==0)
				strcpy(str[k++].st,MS[i-1].word);
			sort(str,str+k,cmp);
			for(i=0;i<k;++i)
				printf("%s
",str[i].st);
		}
	}
	return 0;
}


原文地址:https://www.cnblogs.com/riskyer/p/3333719.html