PAT乙级真题 | 1043 输出PATest
1043 输出PATest
给定一个长度不超过 1 的、仅由英文字母构成的字符串。请将字符重新调整顺序,按
PATestPATest....
这样的顺序输出,并忽略其它字符。当然,六种字符的个数不一定是一样多的,若某种字符已经输出完,则余下的字符仍按 PATest 的顺序打印,直到所有字符都被输出。输入格式:
输入在一行中给出一个长度不超过 1 的、仅由英文字母构成的非空字符串。
输出格式:
在一行中按题目要求输出排序后的字符串。题目保证输出非空。
输入样例:
redlesPayBestPATTopTeePHPereatitAPPT
输出样例:
PATestPATestPTetPTePePee
作者: CHEN, Yue单位: 浙江大学时间限制: 400 ms内存限制: 64 MB代码长度限制: 16 KB
思路: 1、接收字符串
2、遍历字符串,使用计数数组,分别对 'P' 'A' 'T' 'e' 's' 't' 这几个字符进行计数
3、根据计数数组,按顺序分别输出'P' 'A' 'T' 'e' 's' 't' (重复循环),若计数为0则不输出,直到计数数组全为零,停止输出
实现代码:
1 /---------C语言实现--------/ 2 #include <stdio.h> 3 4 int main(void) 5 { 6 char inputStr[10005]; //测试样例 7 int count[6] = { 0 }; //计数数组,每一位分别对应'P' 'A' 'T'...的数量 8 char outputStr[6] = {"PATest"}; //输出用字符数组 9 int i; 10 11 gets(inputStr); 12 13 //接受字符串,遍历字符串,更新计数数组 14 for (i = 0; inputStr[i] != '\0'; i++) 15 { 16 switch (inputStr[i]) 17 { 18 case 'P': 19 count[0]++; 20 break; 21 case 'A': 22 count[1]++; 23 break; 24 case 'T': 25 count[2]++; 26 break; 27 case 'e': 28 count[3]++; 29 break; 30 case 's': 31 count[4]++; 32 break; 33 case 't': 34 count[5]++; 35 break; 36 default: 37 break; 38 } 39 } 40 41 i = 0; //初始化计数变量 、 42 43 //循环条件:计数数组各元素不同时为零,"!(同时为零)" 即是 "不同时为零" 44 while (!(count[0] == 0 && count[1] == 0 && count[2] == 0 && 45 count[3] == 0 && count[4] == 0 && count[5] == 0)) 46 { 47 if (count[i] > 0) 48 { 49 printf("%c", outputStr[i]); //输出对应位置上的字符 50 count[i]--; 51 } 52 53 //i等于5时已遍历到末尾,更新计数变量回到初始位置 54 if (i == 5) 55 { 56 i = 0; 57 } 58 else //未到末尾则继续向后遍历 59 { 60 i++; 61 } 62 } 63 64 return 0; 65 }