題目:http://e-tutor.itsa.org.tw/e-Tutor/mod/programming/view.php?id=2162

[C_AR20-易] 檢查數值是否有重複

 

問題描述 :

給予一個由1到N的所有整數構成的數列,不依大小排列。 寫一函數檢查此數列是否每個數值只出現一次。

 

輸入說明 :

輸入分為兩行,第一行是一個介於1與128間的正整數,代表第二行中數列中的數字個數。

第二行是由空白鍵分隔開的數字序列,不超過128個數。每一個數值介於1到序列數字個數的整數。

輸出說明 :

若是每個數字剛好只出現一次則輸出1,輸出0表示其中有重複的數字。

 

範例 :

 

Sample Input:

Sample Output:

8
1 4 6 2 3 5 8 7

1

 

題目要求輸入一個整數,再輸入那個數目的一串數字

所以先宣告一個num

再用一個for迴圈

for(int i=0;i<num;i++)

這樣就有多個輸入了,但是題目接下來要計算每個數字的出現次數,

但照以上的輸入,input會輸入一個之後,就會被下一個蓋掉

所以要在一開始宣告一個陣列,來依序存放input

按照一開始輸入的num決定陣列的大小

 

再來就是計算陣列數字的出現數字了

一開始先一個迴圈,走訪陣列裡的每個位置

假設第一個位置是1,要怎麼得知1在陣列出現幾次呢

照人的大腦思考,應該是從第一個開始看,如果有1

就+1,看到最後就知道有幾個1了

之後把以上的想法轉為程式碼

其實不用把裡面的迴圈跑完,因為只要有數字出現2次,就要印出0了

所以當c>1時,就break,跳出內層迴圈之後,

還在外層的迴圈裡,這時還是c>1

因為已經重複,要印出0,所以之後的程式碼,也不用繼續執行

所以在內層迴圈的下面加個條件

在跑內層迴圈時,c如果>1,break,跳出內層迴圈

執行到下面一行,c>1,所以break

如果c<=1的話,迴圈就會繼續執行

最後就是輸出了

如果>1,輸出0

其他,輸出1

全部程式碼

  1. #include <iostream>  
  2. using namespace std;  
  3. int main()  
  4. {  
  5.     int num;  
  6.     cin>>num;  
  7.     int arr[num];  
  8.     for(int i=0;i<num;i++)  
  9.     {  
  10.         int input;  
  11.         cin>>input;  
  12.         arr[i]=input;  
  13.     }  
  14.     int c;  
  15.     for(int i=0;i<num;i++)  
  16.     {  
  17.         c=0;  
  18.         for(int j=0;j<num;j++)  
  19.         {  
  20.             if(arr[i]==arr[j])  
  21.                 c++;  
  22.             if(c>1)  
  23.                 break;  
  24.         }  
  25.         if(c>1)  
  26.             break;  
  27.     }  
  28.     if(c>1)  
  29.         cout<<"0"<<endl;  
  30.     else  
  31.         cout<<"1"<<endl;  
  32.   
  33.     return 0;  
  34. }  

那這題就到這完畢

若想閱讀相關文章請關注我的粉絲團

小資菜鳥向前衝

https://www.facebook.com/%E5%B0%8F%E8%B3%87%E8%8F%9C%E9%B3%A5%E5%90%91%E5%89%8D%E8%A1%9D-204484273323335/?fref=ts

arrow
arrow
    文章標籤
    程式設計
    全站熱搜

    cychss6305 發表在 痞客邦 留言(0) 人氣()