因此,我的任務是執行以下操作:
我得到了兩個帶有哨兵值的陣列。我需要創建一個函式來遍歷這些,找到相應元素的 GCD(例如:array1[0] 和 array2[0]),并將結果存盤到結果陣列中,直到它達到標記值。
我已經嘗試了第 0 個元素并且它有效。
uj5u.com熱心網友回復:
從您的實作/代碼中可以提到和改進的事情很少:
- 使用減號獲得除法/模數的效果。
while (remainder >= tempvar2) {
remainder = remainder - tempvar2;
}
- 您的迭代僅檢查單個元素,當變為負值時外部回圈停止。
remainder
tempvar1 = array1[0];
tempvar2 = array2[0];
/*
if your code are logically correct and returning the correct value,
you could put more loop,
to replace the tempvar1 and tempvar2 for checking next pair of single element.
*/
- 您撰寫的函式回傳單個 int 值&函式中回傳的也是單個 int 值。
int GCD(int array1[], int array2[]) {
//...ur implementation
result = tempvar1;
return result;
}
僅供參考,C語言無法回傳陣列,而是回傳陣列的地址。這適用于result更改為陣列型別變數時,請隨時在此處探索更多內容:
在 C 中,我如何讓這個程式回傳陣列的地址,而不是第一個元素的地址?
總結一下可以從這些復雜的答案中得到什么:
int (*GCD(int array1[], int array2[]))[7];
return &result;
uj5u.com熱心網友回復:
遞回gcd()更快。
#include <stdio.h>
#define SENTINEL 255 // or a negative number
int gcd (int p, int q) { // Recursive
if (q) return gcd (q, p % q);
return p;
}
void GCD_array (int a1[], int a2[], int ans[]) {
for (int ni = 0; !(SENTINEL == a1[ni] || SENTINEL == a2[ni]); ni) {
ans[ni] = gcd (a1[ni], a2[ni]);
}
}
int main (void) {
int array1[] = {245, 92, 16, 1, 3, 22, SENTINEL};
int array2[] = {57, 226, 240, 15, 22, 3, SENTINEL};
int count = sizeof (array1) / sizeof (int) -1;
int ans [count];
GCD_array (array1, array2, ans);
for (int ai = 0; ai < count; ai)
printf ("gcd (%d, %d) = %d\n", array1[ai], array2[ai], ans[ai]);
return 0;
}
uj5u.com熱心網友回復:
如圖所示修改 GCD 以接受兩個整數
int GCD(int var1, int var2) {
int tempvar1;
int tempvar2;
int result;
int remainder;
int i;
tempvar1 = var1;
tempvar2 = var2;
在 main 中,添加代碼以回圈遍歷陣列
int i = 0;
int array_len = sizeof(array1)/4;
int array_result[array_len];
while ( (i < array_len) && (array1[i] != 255))
{
array_result[i] = GCD (array1[i], array2[i]);
printf ("%d\n", array_result[i]);
i;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/448224.html
上一篇:需要澄清遞回函式方法論
