【问题标题】:My c++ compiler is giving the correct output but the codeforces compiler for c++ is giving a wrong output [closed]我的 c++ 编译器给出了正确的输出,但是 c++ 的 codeforces 编译器给出了错误的输出[关闭]
【发布时间】:2021-06-15 21:41:32
【问题描述】:

问题 - 一个士兵想在商店里买 w 个香蕉。他必须为第一个香蕉支付 k 美元,为第二个香蕉支付 2k 美元,依此类推(换句话说,他必须为第 i 个香蕉支付 i·k 美元)。

他有 n 美元。他要向朋友小兵借多少钱才能买w根香蕉?

输入 - 第一行包含三个正整数 k, n, w (1  ≤  k, w  ≤  1000, 0 ≤ n ≤ 109),第一根香蕉的成本,士兵的初始美元数量和数量他想要的香蕉。

输出 - 输出一个整数 - 士兵必须向他的朋友借的美元金额。如果他不用借钱,输出0。

测试用例输入 - 3 17 4 测试用例输出 - 13

不幸的是,他们只给出了 1 个示例测试用例。 CodeForces 链接 - https://codeforces.com/problemset/problem/546/A

我的代码 -

int main()
{
    int k,n,w,s;
    cin >> k >> n >> w;
    for(int i=1;i<=w;i++){
        s = s+i*k;
    }
    cout << s-n; //line 11
    return 0;
} 

CodeForces 编译器给出的输出 = 543968169。 在第 11 行,该编译器给出错误 - '未初始化的值使用'。 我该如何解决这个问题?

【问题讨论】:

  • 你忘了初始化s
  • 但是我在第3行说的是int
  • 所以您的意思是要修复给出错误输出“第 11 行”的编译器?
  • 说它是int,和给int 一个已知值是两件不同的事情。 [ProTip] 如果你想让一个变量有一个起始值,在你声明它的时候给它。假设它将具有预期值会导致很多错误。
  • @ProgrammerGuy 当两个编译器给出不同的结果时,总是从寻找未定义的行为开始。在您的代码中,从未初始化的 s 读取的是 UB。

标签: c++ for-loop math implementation brute-force


【解决方案1】:

您使用了变量s 的值而没有对其进行初始化。

s是非静态局部变量,所以是默认初始化的,也就是说int不会进行初始化。

在循环之前将其初始化为适当的值以解决问题。

【讨论】:

  • 例如在您的 cin 命令前添加s=0;
  • 是的,我明白了,谢谢。
猜你喜欢
  • 1970-01-01
  • 2015-05-01
  • 2016-06-15
  • 2011-09-18
  • 1970-01-01
  • 2022-01-16
  • 2012-11-06
  • 1970-01-01
  • 2022-11-27
相关资源
最近更新 更多