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 }

 

posted @ 2019-07-15 21:32  DylanLiuH2O  阅读(147)  评论(0编辑  收藏  举报