HDU3783 ZOJ【文本处理】

ZOJ

Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 4666 Accepted Submission(s): 3037

Problem Description
读入一个字符串,字符串中包含ZOJ三个字符,个数不一定相等,按ZOJ的顺序输出,当某个字符用完时,剩下的仍然按照ZOJ的顺序输出。

Input
题目包含多组用例,每组用例占一行,包含ZOJ三个字符,当输入“E”时表示输入结束。
1<=length<=100。

Output
对于每组输入,请输出一行,表示按照要求处理后的字符串。
具体可见样例。

Sample Input
ZZOOOJJJ
ZZZZOOOOOJJJ
ZOOOJJ
E

Sample Output
ZOJZOJOJ
ZOJZOJZOJZOO
ZOJOJO

Source
浙大计算机研究生复试上机考试-2009年

问题链接HDU3783 ZOJ
问题简述:(略)
问题分析:文本处理问题,给出2种题解,如果输入按字符流进行处理则不需要使用数组来存储读入的数据,但是编程技巧要高一些。
程序说明:(略)
参考链接:(略)
题记:(略)

AC的C++语言程序如下:

/* HDU3783 ZOJ */

#include <bits/stdc++.h>

using namespace std;

int main()
{
    char c;
    int z = 0, o = 0, j = 0;
    while((c = getchar()) != EOF) {
        if(c == 'E') break;
        else if(c == '\n') {
            while(z || o || j) {
                if(z) z--, putchar('Z');
                if(o) o--, putchar('O');
                if(j) j--, putchar('J');
            }
            putchar('\n');

            z = o = j = 0;
        } else {
            if(c == 'Z') z++;
            else if(c == 'O') o++;
            else if(c == 'J') j++;
        }
    }

    return 0;
}

AC的C++语言程序如下:

/* HDU3783 ZOJ */

#include <bits/stdc++.h>

using namespace std;

const int N = 100 + 1;
char s[N];

int main()
{
    while(~scanf("%s", s) && s[0] != 'E') {
        int z = 0, o = 0, j = 0;
        for(int i = 0; s[i]; i++)
            if(s[i] == 'Z') z++;
            else if(s[i] == 'O') o++;
            else if(s[i] == 'J') j++;

        while(z || o || j) {
            if(z) z--, putchar('Z');
            if(o) o--, putchar('O');
            if(j) j--, putchar('J');
        }
        putchar('\n');
    }

    return 0;
}
原创文章 2323 获赞 2382 访问量 269万+

猜你喜欢

转载自blog.csdn.net/tigerisland45/article/details/105805654