aoe666 @ 2024-11-17 09:44:45
代码如下:
#include <stdio.h>
int
main (void)
{
int output[201] = { 0 }; /* 存储需要输出的数据*/
int i = 1; /* 索引, 0记录矩形的边长,单独处理 */
int c = 0; /* 读入字符 */
int count = 0; /* 统计读入字符的数量,遇到第一个换行符时,得到矩形的边长 */
int n = 0; /* 记录'0' 或 '1' 的个数*/
int flag = '0'; /* 通过 */
/* 未通过1
int flag = getchar ();
ungetc (flag, stdin);
*/
/* 未通过2
int flag = getchar ();
++count;
++n;
*/
while ((c = getchar ()) != EOF) {
if (c == '\n') { /* 记录矩形边长 */
if (output[0] == 0) {
output[0] = count;
}
continue;
}
if (c != flag) { /* 记录'0'或'1'的个数*/
flag = c;
output[i++] = n;
n = 0;
}
++count;
++n;
}
// 输出
output[i] = n;
for (int j = 0; j <= i; ++j) {
printf ("%d%s", output[j], j == i ? "\n" : " ");
}
return 0;
}
问题是这里: 设立了一个标志位判断是'0'还是'1',刚开始简单的赋值为'0',通过了。 后来又想如果第一个输入不确定'0'还是'1'呢(题目说了是'0'),于是又改了下,flag设置成第一个读入的字符。结果就通不过了。半天没想明白,请大佬解惑
int flag = '0'; /* 通过 */
/* 未通过1
int flag = getchar ();
ungetc (flag, stdin);
*/
/* 未通过2
int flag = getchar ();
++count;
++n;
*/
by Tiskan_H @ 2024-11-21 15:16:34
@aoe666
个人理解,如果第一个是1,应该会先输出0
例
1 1
0 0
应该是2 0 2 2
by aoe666 @ 2024-11-21 21:05:21
@Tiskan_H 哈哈,几天没来都快忘了这个了。 前两天我不能下载测试数据,今天看到你的消息,也能下载测试数据了.又试了一下,发现我本机和服务器的结果不一样。 我本机测试的结果是对的,平台的却错了。 第一次在平台上做题,不知道和本机有什么区别,感觉是输出流的问题。Debug了半天,搞不懂,不搞了
by aoe666 @ 2024-11-21 21:10:17
@Tiskan_H 你给的例子,我在本地测试,结果是2 2 2,也没问题