1. 程式人生 > >PAT乙級 輸出PATest

PAT乙級 輸出PATest

問題描述
1043 輸出PATest (20 分)

給定一個長度不超過 10​4​​ 的、僅由英文字母構成的字串。請將字元重新調整順序,按 PATestPATest… 這樣的順序輸出,並忽略其它字元。當然,六種字元的個數不一定是一樣多的,若某種字元已經輸出完,則餘下的字元仍按 PATest 的順序列印,直到所有字元都被輸出。
輸入格式:

輸入在一行中給出一個長度不超過 10​4​​ 的、僅由英文字母構成的非空字串。
輸出格式:

在一行中按題目要求輸出排序後的字串。題目保證輸出非空。
輸入樣例:

redlesPayBestPATTopTeePHPereatitAPPT

輸出樣例:

PATestPATestPTetPTePePee

作者: CHEN, Yue
單位: 浙江大學
時間限制: 400 ms
記憶體限制: 64 MB
程式碼長度限制: 16 KB

#include <iostream>
#include <string>
#define N 10000
using namespace std;

int main()
{
	string str;
	cin>>str;
	char s[N];
	int i,j=0,k;
	for(i=0;i<str.length();i++)
		if(str[i]=='P'||str[i]=='A'||str[i]=='T'||str[i]=='e'||str[i]=='s'||str[i]=='t')
			s[j++]=str[i];
	int count[6]={0};
	for(i=0;i<j;i++)
	{
		if(s[i]=='P')
			count[0]++;
		else if(s[i]=='A')
			count[1]++;
		else if(s[i]=='T')
			count[2]++;
		else if(s[i]=='e')
			count[3]++;
		else if(s[i]=='s')
			count[4]++;
		else
			count[5]++; 
	}
	int min=count[0],max=count[0];
	int mini=0,maxi=0;
	for(i=0;i<6;i++)
	{
		if(count[i]<min)
		{
			min=count[i];//字數最少的字母個數 
			mini=i;
		}
		if(count[i]>max)
		{
			max=count[i];
			maxi=i;
		}		
	}
	for(i=0;i<min;i++)
		cout<<"PATest";
	while(max--)
	{
		if(count[0]-min)
		{
			cout<<'P';
			count[0]--;	
		}
		if(count[1]-min)
		{
			cout<<'A';
			count[1]--;	
		}
		if(count[2]-min)
		{
			cout<<'T';
			count[2]--;	
		}
		if(count[3]-min)
		{
			cout<<'e';
			count[3]--;	
		}
		if(count[4]-min)
		{
			cout<<'s';
			count[4]--;	
		}
		if(count[5]-min)
		{
			cout<<'t';
			count[5]--;	
		}
	} 
	return 0;
}

第一次做這道題時輸出完整的PATest後對於剩下的字母不知道怎麼解決了。。。。其實可以不用分為完整的和不完整的,可以按照他們的個數一個個的輸出。很慶幸這次我沒有自己放棄而是去搜答案,我自己做出來了。I Got It!