社区讨论

题目换行符或使用不规范,可能导致错误

P1598[USACO03FEB] 垂直柱状图 Vertical Histogram参与者 2已保存回复 1

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
1 条
当前快照
1 份
快照标识符
@lpo1h4fk
此快照首次捕获于
2023/12/02 20:37
2 年前
此快照最后确认于
2023/12/02 22:05
2 年前
查看原帖
使用如下代码,在本地与洛谷在线ide得到输出均与题解相同,但提交却无法通过
C
#include <stdio.h>
#define max(a, b) (((a) > (b)) ? (a) : (b))

int main(int argc, char *argv[]) {
    int counts[26];
    for (int i = 0; i < 26; ++i) {
        counts[i] = 0;
    }

    char ch;
    int m = 0;
    for (int i = 0; i < 4; ++i) {
        while ((ch = getchar()) != '\n' && ch != '\r' && ch != EOF) {
            getchar();
            if(ch>='A' && ch<='Z') {
                counts[ch - 'A']++;
                m = max(m, counts[ch - 'A']);
            }
        }
    }
    for (int i = 0; i < m; ++i) {
        for (int j = 0; j < 26; ++j) {
            int flag = 0;
            for (int k = j + 1; k < 26; ++k) {
                if (counts[k] >= m - i) flag = 1;
            }

            if (counts[j] >= m - i) {
                putchar('*');
                if (flag) putchar(' ');
            } else {
                if (flag) printf("  ");
                else {
                    putchar('\n');
                    break;
                }
            }
        }
    }
    for (int i = 0; i < 26; ++i) {
        putchar('A' + i);
        if (i < 25) putchar(' ');
    }
    return 0;
}
C
...
  for (int i = 0; i < 4; ++i) {
        while ((ch = getchar()) != '\n' && ch != '\r' && ch != EOF) {
            getchar();
            if(ch>='A' && ch<='Z') {
                counts[ch - 'A']++;
                m = max(m, counts[ch - 'A']);
            }
        }
    }
改为
C
 for (int i = 0; i < 7; ++i) {
        while ((ch = getchar()) != '\n' && ch != '\r' && ch != EOF) {
            getchar();
            if(ch>='A' && ch<='Z') {
                counts[ch - 'A']++;
                m = max(m, counts[ch - 'A']);
            }
        }
    }
或者
C
 for (int i = 0; i < 4; ++i) {
        while ((ch = getchar()) != '\n' && ch != '\r' && ch != EOF) {
           
            if(ch>='A' && ch<='Z') {
                counts[ch - 'A']++;
                m = max(m, counts[ch - 'A']);
            }
        }
   	getchar();
    }
可通过测试点1,3,4,在线ide测试却反而给出错误输出,个人推测为不同测试点使用换行符不同导致.

回复

1 条回复,欢迎继续交流。

正在加载回复...