为何解决数组乘积非负问题的C++代码中不能使用break语句?
为什么你的代码里不能用break?
你代码里的break会直接导致测试用例失败,核心问题出在输入读取的连贯性上,具体来说:
- 当遇到第一个0就break终止循环时,当前测试用例的剩余数组元素还没被
cin读取,这些未处理的输入会被下一个测试用例当成自己的输入数据,直接打乱后续所有测试用例的输入解析,结果自然全错。 - 另外补充一点:其实只要数组里有0,不管负数个数是奇是偶,都能通过保留0让乘积为0(满足非负要求),所以统计完整的负数个数也不影响最终判断,但break带来的输入混乱才是致命问题。
举个实际出错的场景:
假设你有两个测试用例:
- 第一个测试用例:
n=3,数组是-1 0 -2 - 第二个测试用例:
n=2,数组是1 2
原代码处理第一个测试用例时,读到0就break,第三个元素-2没被读取。处理第二个测试用例时,cin>>n会读到残留的-2,而不是预期的2,后面的输入全乱套,测试用例肯定过不了。
把break删掉后,循环会读完当前测试用例的所有元素,既不会漏统计负数,也不会影响下一个测试用例的输入,所以能通过所有测试点。
内容的提问来源于stack exchange,提问作者Rachel Dare
相关产品推荐
相关产品推荐

