【发布时间】:2022-01-11 23:23:11
【问题描述】:
我被赋予了这个任务:
编写一个接受整数数组“arr”及其大小的函数 “n”和一个整数“key”(已知数组至少有 2 整数)。
如果数组中有两个整数的和小于“key”,则该函数检查并返回 1,否则该函数 返回0。另外如果有满足这个条件的整数,函数会将它们的值传递给“n”和“key”,否则传递-1。
这是我的解决方案:
int ex5(int* arr, int* n, int* key)
{
while (*n > 0)
{
int i;
for (i = 0; i < *n - 1; i++)
{
if (arr[*n-1] + arr[i] < *key)
{
*n = arr[i];
*key = arr[*n-1];*
return 1;
}
}
--*n;
}
*n = -1;
*key = -1;
return 0;
}
这是我的主要功能:
int main()
{
int arr[] = {1, 6, 2, 4, 3}, n = 5, key = 4;
int res = ex5(arr, &n, &key);
printf("%d %d %d", res, n, key);
}
但是,当我运行我的代码时,函数返回 1 并传递 (n = 1, key = 1),它应该传递 (n = 2, key = 1)。
【问题讨论】:
-
如果将
*n和*key的值复制到局部变量中,整个事情会容易得多。然后编写两个嵌套的for循环,找到一对满足条件的数组元素。