題目: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 |
題目要求輸入一個整數,再輸入那個數目的一串數字
所以先宣告一個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
全部程式碼
- #include <iostream>
- using namespace std;
- int main()
- {
- int num;
- cin>>num;
- int arr[num];
- for(int i=0;i<num;i++)
- {
- int input;
- cin>>input;
- arr[i]=input;
- }
- int c;
- for(int i=0;i<num;i++)
- {
- c=0;
- for(int j=0;j<num;j++)
- {
- if(arr[i]==arr[j])
- c++;
- if(c>1)
- break;
- }
- if(c>1)
- break;
- }
- if(c>1)
- cout<<"0"<<endl;
- else
- cout<<"1"<<endl;
- return 0;
- }
那這題就到這完畢
若想閱讀相關文章請關注我的粉絲團
小資菜鳥向前衝