如果你遇到了这个问题,那么你大概率是使用了 scanf("%c", &a); 进行读入。
事实上,这道题的数据每行末尾不只有 '\n' ,还有一个 '\r' 。(寄了无数次试出来的血的教训)
拿第一组数据为例,你看到的是
6
114514
你以为的输入:6\n114514,其实真正输进去的是6\r\n114514(没想到吧)。
所以很多c语言的代码直接用%c读入就错了。
方案一:先用 scanf("%d\n", &n); 读入位数,此时 '\r' 和 '\n' 都已经被处理掉了;接下来就可以正常使用 scanf("%c", &a); ( a 是 char 类型的)读入了。
方案二:读入位数部分正常使用 scanf("%d", &n); ,读入每一位的部分使用 scanf("%1d", &a); ( a 是 int 类型的)。
方案三:读入位数部分仍然正常使用 scanf("%d", &n); ,读入每一位的部分使用 scanf("%s", str); ( str 是字符数组),然后再对 str 的每一位分别处理。
方案四:读入位数部分仍然正常使用 scanf("%d", &n); ,在读入每一位数字前先 getchar(); 两次,分别处理掉 '\r' 和 '\n' ,随后正常使用 scanf("%c", &a); ( a 是 char 类型的)。
方案五:读入位数部分仍然正常使用 scanf("%d", &n); ,在读入每一位数字前先用 scanf("\n"); 把 '\n' 处理掉,同时 '\r' 被跳过。
(不过不知道为什么 scanf("\n"); 能过,但是 scanf("%*[\n]") 过不了,有人帮忙解释一下吗?)
scanf("%d", &n); ,读入每一位数字时使用 scanf("%1s", str) 以达成每次处理一位的效果。