2014-01-10 15 views
-3
#include <stdio.h> 
#include <string.h> 
#include <stdlib.h> 

//finds the number that is used only once 
void t(int c, int a[]){ 
    int i,j; 

for(i=0;i<c;i++){ 
    for(j=i+1;j<c;j++){ 
     if(a[i]==a[j]){ 
      a[i]=0; 
      a[j]=0; 
     } 
    } 
} 

for(i=0;i<c;i++){ 
if(a[i]!=0) 
    printf("%d\n",a[i]); 
} 

} 

請找到t的函數的錯誤,因爲編譯器不顯示任何錯誤..我試圖找到在數組中只能使用一次的數字。

有什麼錯在這裏?;

 if(a[i]==a[j]){ 
     a[i]=0; 
     a[j]=0; 
     } 
+3

的人只是拋出一些bug的代碼,說:「請找錯誤」一般不考慮激勵* *在這裏,在這樣的人。所以,請儘量至少描述一下你的問題並解釋你不瞭解的內容,如果你這樣做,你會在這裏找到許多有幫助的人。 – cmaster

+0

我不會把一些錯誤的代碼扔給你,我只是不擅長編碼,這是我的工作。如果我沒有嘗試,我甚至不會把我的代碼放在這裏,我只是說「請編寫一個程序,它只能在數組中使用一次。」所以如果你不能幫忙,不要打擾你的手指寫一個答案。 – user3183745

回答

0

我想這可能工作:

#include <stdio.h> 
#include <string.h> 
#include <stdlib.h> 

//finds the number that is used only once 
void t(int c, int a[][2]){ 
    int i,j; 

for(i=0;i<c;i++){ 
    for(j=0;j<c;j++){ 
     if(a[i][0]==a[j][0] && i != j){ 
      a[i][1]=1; 
     } 
    } 
} 

for(i=0;i<c;i++){ 
if(a[i][1]==0) 
    printf("%d\n",a[i][0]); 
} 

} 

int main(int argc, char * argv[]) 
{ 
    int a[][2] = {{1,0},{2,0},{3,0},{4,0},{3,0},{2,0},{1,0},{3,0},{5,0},{5,0},{2,0},{3,0}}; 
    t(12, a); 
} 

我包括一個主顯示預期的呼叫。它在兩個循環中都具有從零迭代的低效率,但我不能很快看到如何避免這種情況。

+0

謝謝你,我明白了 – user3183745

-2

您有錯誤的主要功能收到的參數。用C語言編寫的程序只接收兩件事:int變量,它是你傳遞的參數的個數,char *是你通過控制檯傳遞的參數列表。那是你的問題。

+0

我在代碼中看不到'main()'... – cmaster

+0

是的,你說得對。對於那個很抱歉! – Abend

+0

我沒有把主要部分放在這裏,因爲問題出在功能上。 – user3183745

3

如果一個數字出現三次(比如說),那麼當您找到第一對時,您將它們設置爲零;這意味着你找不到第三個外觀。如果你知道只有一個唯一的數字,你可以計算匹配,然後存儲索引,如果你通過循環,並沒有找到匹配。

+0

你是對的我沒想到有可能有3個或更多的重複數字。我只是不明白如何打印不匹配的數字。 – user3183745

0

由您的政策修改。 (但無法找到一個爲零,該元素被破壞)

//finds the number that is used only once 
void t(int c, int a[]){ 
    int i, j, find; 

    for(i=0;i<c;i++){ 
     if(a[i]==0) 
      continue; 
     find = 0; 
     for(j=i+1;j<c;j++){ 
      if(a[i]==a[j]){ 
       find = 1; 
       a[j]=0; 
      } 
     } 
     if(find==0) 
      printf("%d\n", a[i]); 
     else 
      a[i] = 0; 
    } 
} 
相關問題