[英]Why exception is thrown at the end of this code?
int main() {
int t;
cin >> t;
while (t--) {
int n, k;
cin >> n >> k;
int* ar1 = new int[n];
int* ar2 = new int[n];
/*int ar1[n];
int ar2[n];*/
for (int i = 0; i < n; i++) {
cin >> ar1[i];
}
for (int i = 0; i < n; i++) {
cin >> ar2[i];
}
sort(ar1, ar1 + n);
sort(ar2, ar2 + n, greater<int>());
int sum = 0;
for (int i = 0; i < n, k>0; i++) {
if (ar1[i] < ar2[i]) {
ar1[i] = ar2[i];
k--;
}
}
for (int i = 0; i < n; i++) {
sum += ar1[i];
}
cout << sum << "\n";
}
return 0;
}
code.exe 中 0x77B6EC75 (ntdll.dll) 处的未处理异常:0xC000000D:将无效参数传递给服务或 function。 每当此代码第一次编译时,它工作正常,但第二次它抛出异常。 我已在 codeforces 上提交此代码,并在正确打印所有结果后打印9720301 。
此循环中的条件是错误的:
for (int i = 0; i < n, k>0; i++)
因为即使在i>=n
时它也可能会失败(条件将评估i<n
,忽略它,并且只检查是否k>0
)。
相反,您需要执行以下操作:
for (int i = 0; i < n && k > 0; i++)
检查是否满足两个条件。 否则,您可能会索引超出arr1
和arr2
的范围,这会引发错误。 (这实际上是未定义的行为,所以任何事情都可能发生)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.