【发布时间】:2015-03-31 15:26:21
【问题描述】:
如果可以的话,请参考thishackerrank挑战。
问题是在数组中找到孤独的整数,给定一个数组只包含一对,除了一个孤独的整数。
问题出在这个测试用例上
9
4 9 95 93 57 4 57 93 9
9 是数组大小,下面是数组
查看 //------ 突出显示的代码部分
如果我将scanf("%d", &n) 放在int arr[n] 上方,代码可以正常工作,但反过来会产生可怕的结果。
#include <stdio.h>
int lonely_integer(int* a, int size);
int main(){
//n is size of array, i is counter variable
int n, i, result;
// ---------------------
int arr[n];
scanf("%d", &n);
// ---------------------
printf("%d\n", n);
for(i = 0; i < n; i++){
scanf("%d", &arr[i]);
}
result = lonely_integer(arr, n);
printf("%d", result);
return 0;
}
int lonely_integer(int* a, int size){
int i;
int res = 0;
for(i = 0; i < size; i++){
res = res ^ a[i];
}
return res;
}
【问题讨论】:
-
如何知道在“n”初始化之前数组应该有多大(即“n”是什么)?
-
但为什么它适用于 4 个测试用例中的 3 个?
-
请您自己考虑一下:
int arr[n]; scanf("%d", &n);您定义了一个大小为 n 的数组,并且 n 的值为 [nothing here],然后您扫描大小...(顺便说一句:如果您有写 cmets 像://n is size of array, i is counter variable那么你的变量名不够有意义,把它们改成counter and size or arraySize) -
如果有缺陷的代码通过了一些测试,那就没有任何意义。 C 中的错误代码非常难以预测。该软件很有可能通过您的所有测试,但是当您在老板的计算机上运行它时,它可以决定删除您老板的所有文件。如果测试失败,它会告诉你一些事情;但是如果测试通过了,它什么也不会告诉你。
-
为什么要将整数存储在数组中?您可以在读取整数时一次只对整数进行计算,这可能会为您节省大量内存并始终为您节省分配内存的复杂性。