【发布时间】: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