2012-12-13 36 views
-2

編寫函數isReverse的定義,其前兩個參數是大小相等的整數數組,第三個參數是指示每個數組大小的整數。當且僅當一個數組與另一個數組相反時,該函數返回true。 (這裏的「反向」意味着相同的元素,但是以相反的順序。)編寫函數的定義,isReverse

int isReverse(int array1[], int array2[], int size) 
{ 
    int i; 
    for (i=0;i<size;i++) 
    { 
     if(array1[i] == array2[size-1]) 
      return 0; 
     else 
      return 1; 
    } 
} 

我不斷收到錯誤。它出什麼問題了。

+1

您可能想分享您收到的錯誤。除此之外,你意識到for循環是無用的? –

+1

*邏輯錯誤?*無論您的for循環重複一次,您都會返回。 –

+2

什麼錯誤!我們不是通靈... – MatBailie

回答

1

返回值是錯誤的,因爲您只檢查每個數組中的1個值,而不是全部數組。你想要做的就是這樣的事情。

for (i=0;i<size;i++) 
{ 
    if(!(array1[i] == array2[size-i])) 
     return 0; 
} 
return 1; 

基本上你去通過陣列一個接一個,如果任何值是不一樣的其他陣列上的合適的值,它不是一個反向的,所以我們返回0。如果我們出去的爲不通過if會循環,這意味着他們有挫折,所以我們返回1

0
int isReverse(int array1[], int array2[], int size) 
    { 
     int flag = 0; 
     for (int i=0;i<size;i++) 
     { 
     if(array1[i] != array2[size-1]){ 
      flag = 1; 
      break; 
     } 
     return flag; 
     } 
    } 

在你已經保持在循環中return語句代碼...保持return語句外循環和嘗試

1

變量「大小」永遠不會改變,所以你alw ays檢查array1的最後一個元素的元素。

由於這聽起來像一個家庭作業問題,我會讓你看看你是否可以從那裏去。

5

如果return從函數中的任何塊中執行,那麼函數的執行就結束在那裏,所以在你的情況下,即使當數組的第一個元素匹配時,你也應該返回函數,這是不正確的,你應該檢查整個數組,然後,從功能到底返回,檢查下面的代碼:

int isReverse(int array1[], int array2[], int size) 
{ 
    int i,status=1; 

    for (i=0;i<size;i++) //Size is the length of the array? if yes than you need -1 from it. 
    { 
     if(array1[i] == array2[size]) 
     { 
      status=0; 
      --size; 
     } 
     else 
      return 1; 
    } 

    return status; 
} 

此外,size-1不改變可變大小的值本身,因此size將保持在整個循環相同,使用--size這將減小數值的實際變量,因此每次減少一個。

+0

bool?問題的標記爲C,而不是C++。 –

+0

更正,謝謝。 – SajjadHashmi

+0

@ErgoProxy C已經有了一個名爲'bool'的類型已有12年了。只是'#include '而已。 – unwind

1

這就是我做到的。

int isReverse(int array1[], int array2[], int SIZE) 
    { 
    for(int counter = 0; counter <= SIZE/2; counter++) 
    if(array1[counter] != array2[SIZE-counter] || array2[counter] != array1[SIZE-counter]) 
     return 1; 
    return 0; 
    } 

您只是將索引爲i的值與常數SIZE-1進行比較。相反,您想比較i的值和比較數組的大小-i。所以每次計數器增量時,都會與相反陣列的大小相比較。你只需要爲數組的一半做這個。

+0

循環展開2的任何特定原因?除了表演,也許呢? – anishsane

+0

我在想,因爲只有一半需要進行比較,所以這會最大限度地減少工作。 – Poppins

+0

你實際上正在比較整個陣列。 – anishsane

0
int isReverse(int a[], int b[], int n) 
{ 
int i = 0; 
while (i<n) 
{ 
if (a[i] != b[n-i-1]) {return 0; break;} 
else i++; 
} 
return 1; 
} 

如果這是正確的答案。

相關問題