我接到了這個任務:
撰寫一個函式,該函式接受一個整數陣列“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)。
uj5u.com熱心網友回復:
*n = arr[i];
*key = arr[*n-1];
上面代碼中的第二行讀取arr[arr[i]-1];這可能超出范圍,例如如果arr[i]是 1000,并且陣列中只有 5 個元素。陣列中的值與陣列大小之間沒有關系。至少顛倒順序:
*key = arr[*n-1];
*n = arr[i];
您還可以使用兩個回圈來簡化代碼。例子
int ex5(int* arr, int *size, int *key)
{
for (int i = 0; i < *size; i )
for (int k = i 1; k < *size; k )
if (arr[i] arr[k] < *key)
{
*key = arr[i];
*size = arr[k];
return 1;
}
return 0;
}
uj5u.com熱心網友回復:
寫2個for回圈這將滿足條件。
int ex5(int* arr, int *size, int *key)
{
int i=0;
while(i<*size)
{
int k=i 1;
while(k<*size)
{
if (arr[i] arr[k] < *key)
{
*key = arr[i];
*size = arr[k];
return 1;
}
i ;
}
return 0;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/384369.html
上一篇:如何在C中復制雙指標陣列?
