如何在订单中打印ZOJ字符串?

时间:2012-08-22 02:52:13

标签: c algorithm

我必须以'ZOJ'的顺序输出每个字符串。字符串的长度是1到100.“E”表示输入的结束。

我用gcc测试我的程序。我尝试了很多例子,输出很好。然而,在线评判结果却是错误的答案。

示例:

输入:

ZZOOOJJJ

ZZZZOOOOOJJJ

ZOOOJJ

电子

输出:

ZOJZOJOJ

ZOJZOJZOJZOO

ZOJOJO

谢谢! 这是我的代码。

#include<stdio.h>
#include<string.h>

#define MAX_SIZE 100

main() {

char data[MAX_SIZE];
int len;
int z,o,j;
int i;
char c;

int z_index, o_index,j_index;

while(scanf("%s", data)!= EOF && (strlen(data)>=1 && data[0] != 'E')) {
    len = strlen(data);

    z = -1;
    o = -1;
    j = -1;
    z_index = -1;
    o_index = -1;
    j_index = -1;

    for(i=0; i<len; i++) {
        c = data[i];
        switch(c) {
            case 'Z':
                if(z==-1)
                    z_index=i,z=i;
                else
                    z = i;
                break;
            case 'O':
                if(o==-1)
                    o_index=i,o=i;
                else
                    o = i;
                break;
            case 'J':
                if(j==-1)
                    j_index=i,j=i;
                else
                    j = i;
                break;
        }

    }

    while(z_index!=-1 || o_index!=-1 || j_index!=-1) {
        if(z_index!=-1 && z_index<=z)
            putchar('Z'), z_index++;
        else
            z_index = -1;

        if(o_index!=-1 && o_index<=o)
            putchar('O'), o_index++;
        else
            o_index = -1;

        if(j_index!=-1 && j_index<=j)
            putchar('J'), j_index++;
        else
            j_index = -1;

    }
    putchar('\n');
}

}

1 个答案:

答案 0 :(得分:0)

你应该真正使你的函数int main()而不仅仅是main(),因此你应该在结尾返回0。

#include<stdio.h>
#include<string.h>

#define MAX_SIZE 100

int main() {
    char data[MAX_SIZE];
    int len;
    int z,o,j;
    int i;
    char c;

    int z_index, o_index,j_index;

    while(scanf("%s", data)!= EOF && (strlen(data)>=1 && data[0] != 'E')) {
        len = strlen(data);

        z = -1;
        o = -1;
        j = -1;
        z_index = -1;
        o_index = -1;
        j_index = -1;

        for(i=0; i<len; i++) {
            c = data[i];
            switch(c) {
                case 'Z':
                    if(z==-1)
                    z_index=i,z=i;
                    else
                    z = i;
                    break;
                case 'O':
                    if(o==-1)
                    o_index=i,o=i;
                    else
                    o = i;
                    break;
                case 'J':
                    if(j==-1)
                        j_index=i,j=i;
                    else
                        j = i;
                    break;
            }
        }

        while(z_index!=-1 || o_index!=-1 || j_index!=-1) {
            if(z_index!=-1 && z_index<=z)
                putchar('Z'), z_index++;
            else
                z_index = -1;

            if(o_index!=-1 && o_index<=o)
                putchar('O'), o_index++;
            else
                o_index = -1;

            if(j_index!=-1 && j_index<=j)
                putchar('J'), j_index++;
            else
                j_index = -1;
        }
        putchar('\n');
    }
    return 0;
}