使用如下代码,在本地与洛谷在线ide得到输出均与题解相同,但提交却无法通过
#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;
}
将
...
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 < 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']);
}
}
}
或者
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测试却反而给出错误输出,个人推测为不同测试点使用换行符不同导致.
参考:传统题数据格式要求