2014-11-13 66 views
1

好吧我解決了它!我的代碼是正確的,系統是愚蠢的,輸出後需要endl ...感謝所有人的回覆!測量數組中的唯一數字

你可以在我的代碼中找到任何錯誤嗎?我試圖測量數組中唯一整數的數量。我使用這個代碼,但它似乎有某個地方的錯誤。 實施例:

輸入:4,1,15,10,1

輸出:3

它是正確的我的代碼輸出3爲好,具有較大的輸入測試並再次它是正確的,但當我將代碼發送到我的大學系統進行評估時,它會正確編譯代碼,但告訴我輸出錯誤。

#include <iostream> 
using namespace std; 


int main() 
{ 

    int n,d; 
    cin>>n; 
    int *A=new int[n]; 

    for(int i=0; i<n; i++) 
     cin>>A[i]; 

    for(int i=1; i<n; i++) 
    { 
     d=i; 
     while(d>0 && A[d] < A[d-1]) 
     { 
      swap(A[d],A[d-1]); 
      d--; 
     } 
    } 

    int count=1; 
    int tmp=A[0]; 
    for(int i=1; i<n; i++) 
     if(tmp!=A[i]){count+=1;tmp=A[i];} 
    cout<<count; 
    return 0; 
} 
+0

你好,歡迎來到StackOverflow!請告訴我們您有什麼問題,以便我們能夠幫助您。也嘗試調試你的代碼,它會幫助你找到問題的根源。 –

+0

這是一個大學的練習,我們要找到數組中的唯一數字並用cout輸出該數字。但是當我發送我的代碼時系統是錯誤的。 – Victor

+0

對不起,請仔細閱讀你的輸入/輸出。你能夠從你的大學系統得到結果,看看它返回的結果嗎? –

回答

0

您的排序算法出現問題。這將工作

#include <iostream> 
using namespace std; 

void swap(int &a, int &b) { 
    int temp = a; 
    a = b; 
    b = a; 
} 

int main() 
{ 

    int n,d; 
    cin>>n; 
    int *A=new int[n]; 

    for(int i=0; i<n; i++) 
     cin>>A[i]; 

    for(int i=0; i<n; i++) 
    { 
     for (int j =0; j < n; j++) { 
     if (A[j] < A[i]) 
      swap(A[i], A[j]); 
    } 
    } 

    int count=1; 
    int tmp=A[0]; 
    for(int i=1; i<n; i++) 
     if(tmp!=A[i]){count+=1;tmp=A[i];} 
    cout<<count; 
    return 0; 
} 
+0

感謝您的回覆,但我沒有得到我的排序錯誤我使用插入排序,並沒有看到一個錯誤。 – Victor

0

我測試了你的程序,做了幾次運行,沒有注意到任何異常。另外,你的冒泡排序算法雖然效率不高,但仍然比Venkatesh的建議快,而這個建議必然會在O(n^2)時間內運行。

此外,嘗試更準確地描述您的問題。只是告訴我們它有一個錯誤,不是很有幫助。 請注意,你可以這樣做:

for(int i=0; i<n; i++) 
{ 
    cin>>A[i]; 
    d=i; 
    while(d>0 && A[d] < A[d-1]) 
    { 
     swap(A[d],A[d-1]); 
     d--; 
    } 
} 

節省您的循環。

+0

感謝您的測試,我也沒有發現錯誤。是不是我的排序方法插入排序? – Victor

+0

你是對的,我第一次看到插入排序,它是以泡泡形式被介紹給我的。我仍然混淆起來。 – Bart

+0

感謝您的循環優化,儘管它有一點點錯誤,但您的邏輯良好。請注意,我從1開始而不是0。 – Victor