1541 - ZOJ

通过次数

0

提交次数

0

时间限制 : 1 秒 内存限制 : 32 MB

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

题目输入

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

1<=length<=100。

题目输出

对于每组输入,请输出一行,表示按照要求处理后的字符串。

具体可见样例。

输入/输出样例

输入格式

ZZOOJJJ
ZOOOJJZOJ
ZZOJ
E

输出格式

ZOJZOJJ
ZOJZOJOJO
ZOJZ

C语言解答

#include <stdio.h>
#include <string.h>
int main()
{
  while(1)
  {
    char line[100];
    scanf("%s",line);
    if(strcmp(line,"E")==0)
    {
      break;
    }
    int zp=0;
    int op=0;
    int jp=0;
    for(int i=0;i<strlen(line);i++)
    {
      if(line[i]=='Z')
      {
        zp++;
      }
      if(line[i]=='O')
      {
        op++;
      }
      if(line[i]=='J')
      {
        jp++;
      }
    }
    while(zp!=0||op!=0||jp!=0)
    {
      if(zp!=0)
      {
        printf("Z");
        zp--;
      }
      if(op!=0)
      {
        printf("O");
        op--;
      }
      if(jp!=0)
      {
        printf("J");
        jp--;
      }
    }
    printf("\n");
  }
}

C++解答

#include <cstdio>
#include <map>
using namespace std;

int main() {
    //freopen("data.in", "r", stdin);
    //freopen("data.out", "w", stdout);
    char s[105];
    while (gets(s)) {
        if ('E' == s[0])
            break;
        map < char, int > mp;
        char zoj[5] = "ZOJ";
        for (char *c = s; *c; ++c)
            ++mp[*c];
        while (1) {
            bool flag = false;
            for (char *c = zoj; *c; ++c)
                if (mp[*c] > 0) {
                    --mp[*c];
                    flag = true;
                    putchar(*c);
                }
            if (!flag) break;
        }
        puts("");
    }
    return 0;
}