多种组合,奇怪的结果,求解
查看原帖
多种组合,奇怪的结果,求解
606023
sduoooh楼主2022/1/19 00:53

当我没有针对输入字符串为单个数字优化时,65分,代码如下

#include <stdio.h>
void op(int n,char *a);
int main() {
    char a[127] = { '0' }, t[127] = { '0' }, r[127] = { '0' };
    int b = 0, i = 0, q = 126;
    scanf("%s", a);
    for (i = 0; a[i]; i++) {
        switch (a[i]) {
        case '/': b = 1; q = i;
            break;
        case '.': b = 2; q = i;
            break;
        case '%': b = 3; q = i;
        }
    }
    if (b != 0) {
        for (int k = 0; k < q; k++) {
            t[k] = a[k];
        }
        for (int k = q + 1; k <= i; k++) {
            r[k-q-1] = a[k];
        }
        op(q,t);
        switch (b) {
        case 1: printf("/");
            op(q,r);
            break;
        case 2: printf(".");
            op(q,r);
            break;
        case 3: printf("%%");
        }
    }
    if (b == 0) op(q,a);
    return 0;
}

void op(int n,char* a) {
    int i = n, j = 126, k = 0;
    char c[127] = { '0' };
    for (; (a[i] == '0'&& i >= 0)||(a[i] == 0 && i >= 0); i--);
    j = i;
    for (; i >= 0; --i) c[j - i] = a[i];
    for (; (c[j] == '0' && j >= 0) || (c[j] == 0 && j >= 0); --j);
    for (; k<=j; k++) {
        printf("%c", c[k]);
    }
}

当我针对字符串为0的优化时(当时是看到第五个点后知后觉意识到的),是打算在前边加入特判

if (a[0] = '0' && a[1] == 0) {
        printf("0");
        return 0;
    }

#include <stdio.h>
void op(int n,char *a);
int main() {
    char a[127] = { '0' }, t[127] = { '0' }, r[127] = { '0' };
    int b = 0, i = 0, q = 126;
    scanf("%s", a);
    if (a[0] = '0' && a[1] == 0) {
        printf("0");
        return 0;
    }
    for (i = 0; a[i]; i++) {
        switch (a[i]) {
        case '/': b = 1; q = i;
            break;
        case '.': b = 2; q = i;
            break;
        case '%': b = 3; q = i;
        }
    }
    if (b != 0) {
        for (int k = 0; k < q; k++) {
            t[k] = a[k];
        }
        for (int k = q + 1; k <= i; k++) {
            r[k-q-1] = a[k];
        }
        op(q,t);
        switch (b) {
        case 1: printf("/");
            op(q,r);
            break;
        case 2: printf(".");
            op(q,r);
            break;
        case 3: printf("%%");
        }
    }
    if (b == 0) op(q,a);
    return 0;
}

void op(int n,char* a) {
    int i = n, j = 126, k = 0;
    char c[127] = { '0' };
    for (; (a[i] == '0'&& i >= 0)||(a[i] == 0 && i >= 0); i--);
    j = i;
    for (; i >= 0; --i) c[j - i] = a[i];
    for (; (c[j] == '0' && j >= 0) || (c[j] == 0 && j >= 0); --j);
    for (; k<=j; k++) {
        printf("%c", c[k]);
    }
}

结果反而只得了测试点5的分,变成了5分...... 后边我试着在op函数内优化,加个if——else的逻辑,删除了前面的特判,结果变成了90,但仍有wa,如下

#include <stdio.h>
void op(int n,char *a);
int main() {
    char a[127] = { '0' }, t[127] = { '0' }, r[127] = { '0' };
    int b = 0, i = 0, q = 126;
    scanf("%s", a);
    for (i = 0; a[i]; i++) {
        switch (a[i]) {
        case '/': b = 1; q = i;
            break;
        case '.': b = 2; q = i;
            break;
        case '%': b = 3; q = i;
        }
    }
    if (b != 0) {
        for (int k = 0; k < q; k++) {
            t[k] = a[k];
        }
        for (int k = q + 1; k <= i; k++) {
            r[k-q-1] = a[k];
        }
        op(q,t);
        switch (b) {
        case 1: printf("/");
            op(q,r);
            break;
        case 2: printf(".");
            op(q,r);
            break;
        case 3: printf("%%");
        }
    }
    if (b == 0) op(q,a);
    return 0;
}

void op(int n,char* a) {
    int i = n, j = 126, k = 0;
    char c[127] = { '0' };
    for (; (a[i] == '0'&& i >= 0)||(a[i] == 0 && i >= 0); i--);
    j = i;
    if (a[1]==0) printf("%c", a[0]);
    else {
        for (; i >= 0; --i) c[j - i] = a[i];
        for (; (c[j] == '0' && j >= 0) || (c[j] == 0 && j >= 0); --j);
        for (; k <= j; k++) {
            printf("%c", c[k]);
        }
    }
}

我自己在vs里琢磨,发现开始是100000% 这类会出现只有%的输出情况,但是后来输啥都乱码了,给我整不会了,但又不知道该怎么办...... 想问下各位,能不能帮我看看我最后面的代码错在了哪......谢谢了,这题整了好久没整明白......

2022/1/19 00:53
加载中...