2016-04-24 102 views
-4
#include "stdio.h" 
int main() 
{ 


    int n[10]={1,1,2,2,3,3,4,4,5,5}; 
    int m =10; 
    for (int i = 0; i < m; i++) 
    { 
     for (int j = i+1; j < m; j++) 
     { 
      if (n[i]==n[j]) 
      { 
       for (int k = j; k< m-1 ; k++) 
       { 
        n[k]=n[k+1]; 
       } 
       m--; 
      } 
     } 
    } 
    for (int i = 0; i < m; i++) 
    { 
     printf("%d\n",n[i]); 
    } 

    return 0; 
} 

中的錯誤當的數據都是1122334455,答案是確定的:12345, 但當1111111111,答案是111,而不是1 請告訴我爲什麼?謝謝!關於重複數據刪除陣列

+1

因爲即使在刪除元素時仍然增加j? – kfsone

+0

你的代碼很難遵循。 –

+0

你想用這個程序做什麼? – fluter

回答

3

當您刪除元素時,j仍然遞增,跳過一個值。以下打印'1'。

#include "stdio.h" 
int main() 
{ 


    int n[10] = { 1,1,1,1,1,1,1,1,1,1 }; 
    int m = 10; 
    for (int i = 0; i < m; i++) 
    { 
     for (int j = i + 1; j < m; j++) 
     { 
      if (n[i] == n[j]) 
      { 
       for (int k = j; k < m - 1; k++) 
       { 
        n[k] = n[k + 1]; 
       } 
       m--; 
       j--; 
      } 
     } 
    } 
    for (int i = 0; i < m; i++) 
    { 
     printf("%d\n", n[i]); 
    } 

    return 0; 
}