PAT乙級 輸出PATest
阿新 • • 發佈:2018-11-25
問題描述
1043 輸出PATest (20 分)
給定一個長度不超過 104 的、僅由英文字母構成的字串。請將字元重新調整順序,按 PATestPATest… 這樣的順序輸出,並忽略其它字元。當然,六種字元的個數不一定是一樣多的,若某種字元已經輸出完,則餘下的字元仍按 PATest 的順序列印,直到所有字元都被輸出。
輸入格式:
輸入在一行中給出一個長度不超過 104 的、僅由英文字母構成的非空字串。
輸出格式:
在一行中按題目要求輸出排序後的字串。題目保證輸出非空。
輸入樣例:
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!