807677_zzxc @ 2022-10-23 22:37:04
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main() {
int a[40000] = { 0 };//来保存点阵码
int count = 0;//存个数
int key = 0;//表示当前记0还是记1的个数
int n;//记录点阵的N
int i = 0;
//实现对第一排的录入,break标志为读取到‘\n’
while (1) {
char p;
p = getchar();
if (p != '\n') {
a[i] = p - '0';//将点阵值(0或1)录入到数组
i++;//下一位
}
else {//读取到'\n'
n = i;//记录点阵的N
break;//跳出while
}
}
//完成对剩下的点阵值的录入,结束标志是EOF
for (i = n; i < n * n; ) {
char p;
if ((p = getchar()) == EOF) {
break;
}
if (p != '\n') {
a[i] = p - '0';//录入点阵值
i++;//下一位
}
}
printf("%d ", n);//打印点阵的N
//从头遍历a数组,并计数0和1
for (i = 0; i < n * n; i++) {
if (key != a[i]) {//表示点阵值0、1的转变,将打印当前的计数,归零重新计数
printf("%d ", count);
key = a[i];
count = 1;
}
else
count++;//计数
}
//循环结束后还有最后一次的计数没有打印
printf("%d", count);
return 0;
}
by ud2_ @ 2022-10-23 22:44:17
又是回车受害者(
这题数据里的换行是 "\r\n"
而不是 "\n"
。
by 807677_zzxc @ 2022-10-23 22:51:31
@ud2_ 有点不是很明白,在对题目给的样例进行单步调试的时候读取到的是'\n',(\r\n不是两个字符了吗,O.o?)
by ud2_ @ 2022-10-23 22:59:46
@807677_zzxc 样例里确实是 "\n"
(即使有 "\r"
也会被调试用的 Windows 机器去掉),但评测时输入的是 "\r\n"
两个字符。
判断各种换行的可靠方法之一是 isspace
。
by 807677_zzxc @ 2022-10-23 23:15:38
@ud2_ 感谢!!判断改成isspace后已经排除问题(。・∀・)ノ