警示后人
查看原帖
警示后人
1096519
milk2715093695楼主2023/11/21 10:26

为什么你的代码明明本地测试能通过但是全部WA

如果你遇到了这个问题,那么你大概率是使用了 scanf("%c", &a); 进行读入

事实上,这道题的数据每行末尾不只有 '\n' ,还有一个 '\r' 。

拿第一组数据为例,你看到的是

6
114514

但其实真正输进去的其实是6\r\n114514

所以很多c语言的代码用直接%c读入就错了

下面提供几个可以参考的思路

  1. 方案一:先用 scanf("%d\n", &n); 读入位数,此时 '\r' 和 '\n' 都已经被处理掉了;接下来就可以正常使用 scanf("%c", &a); ( a 是 char 类型的)读入了。

  2. 方案二:读入位数部分正常使用 scanf("%d", &n); ,读入每一位的部分使用 scanf("%1d", &a); ( a 是 int 类型的)。

  3. 方案三:读入位数部分仍然正常使用 scanf("%d", &n); ,读入每一位的部分使用 scanf("%s", str); ( str 是字符数组),然后再对 str 的每一位分别处理。

  4. 方案四:读入位数部分仍然正常使用 scanf("%d", &n); ,在读入每一位数字前先 getchar(); 两次,分别处理掉 '\r' 和 '\n' ,随后正常使用 scanf("%c", &a); ( a 是 char 类型的)。

  5. 方案五:读入位数部分仍然正常使用 scanf("%d", &n); ,在读入每一位数字前先用 scanf("\n", &useless); 把 '\n' 处理掉,同时 '\r' 被跳过。

  6. 方案六:读入位数部分仍然正常使用 scanf("%d", &n); ,读入每一位数字时使用 scanf("%1s", str) 以达成每次处理一位的效果

2023/11/21 10:26
加载中...