#include<stdio.h>
int main()
{
int N, n, m, i, t, l, s = 0, s1 = 0;
scanf("%d", &N);
for (i = 1; i <= N; i++)
{
scanf("%d", &n);
for (l = 1; l <= n; l++)
{
scanf("%d %d", &m, &t);
if (m == 0) s = 0;
else s = m + (t - 1) * 20;
s1 += s;
}
}
printf("%d", s1);
return 0;
}
```为什么这段代码在校园oj平台上运行结果依然错误
![img](https://img-mid.csdnimg.cn/release/static/image/mid/ask/262877353007140.png "#left")
c语言课前不预习问题
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
4条回答 默认 最新
- K_n_i_g_h_t_1990 2023-11-20 10:44关注
在你的代码中,内层的 for 循环中有一句 if (m == 0) s = 0;,这意味着如果 m 的值为0,s 的值将被设为0。然而,这样的设置会影响到后续的循环,导致 s1 的计算结果出现错误。具体来说,s1 是一个累加变量,而在内层循环中的 if (m == 0) s = 0; 语句会影响到 s 的值,从而影响到 s1 的累加。
解决方法是在每一轮循环开始前将 s 的值初始化为0,以确保 s 的值不受上一次循环的影响。修改代码如下:
#include <stdio.h> int main() { int N, n, m, i, t, l, s = 0, s1 = 0; scanf("%d", &N); for (i = 1; i <= N; i++) { scanf("%d", &n); for (l = 1; l <= n; l++) { // 在每一轮循环开始前将 s 初始化为 0 s = 0; scanf("%d %d", &m, &t); if (m != 0) { s = m + (t - 1) * 20; } s1 += s; } } printf("%d", s1); return 0; }
这样修改后,每一轮内层循环开始前,s 的值都被初始化为0,不再受到上一次循环的影响,从而能够正确计算 s1。
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 1无用
悬赏问题
- ¥15 岛津txt格式文件转nirs格式
- ¥15 石墨烯磁表面等离子体
- ¥15 angular 项目无法启动
- ¥15 安装wampserver,图标绿色,但是无法进入软件
- ¥15 C++ MFC 标准库 加密解密解惑
- ¥15 两条数据合并成一条数据
- ¥15 Ubuntu虚拟机设置
- ¥15 comsol三维模型中磁场为什么没有“速度(洛伦兹项)”这一选项
- ¥15 electron 如何实现自定义安装界面
- ¥15 关于#linux#的问题:子进程C运行“ls –l”命令,且显示“C运行ls-l命令”(语言-c语言)