題目是http://e-tutor.itsa.org.tw/e-Tutor/mod/programming/view.php?a=2956
The Numbers
問題描述:
請寫一個程式,判斷一個數字N出現在另外一個數字M中的次數。
10 ≤ N ≤ 99,1000000 ≤ M ≤ 9999999
輸入說明 : 輸入資料有兩個整數,N和M。
輸出說明 : 輸出為一整數,也就是N出現在M裡面的次數。
範例 :
Sample Input: |
Sample Output: |
90 9090999 |
2 |
從輸入開始,要有兩個整數
這題可以判斷為需要用到迴圈,而迴圈要有範圍
這個範圍應該可以想到是兩個整數的長度
但如果宣告int 的話,要得到長度就得想辦法知道它有幾位數
這樣會比較麻煩
所以用字串來做會比較容易,記得打上#include <string.h>
輸入就是
string small,input; //small是短的,input是長的
getline(cin,small);
getline(cin,input);
這時問題來了,題目兩個數字
都是輸入在同一行裡,但是getline只能換行時,才會結束輸入
照著上面的程式碼,想要有兩個字串在比較
輸入就得打兩行
所以要把程式碼改成
getline(cin,small,' ');
後面的 ' ' 就是可以讓輸入可以到 ' ' 時停止
(C++ 輸入 http://cychss6305.pixnet.net/blog/post/239128768)
輸出結果
再來是找出出現幾次了
首先用一個for迴圈,走訪長的字串,也就是input
先看這張圖
跟我的上一篇文章一樣
範圍是i<=input.size()-lens,
所以迴圈的程式碼就是
for(int i=0;i<=input.size()-small.size();i++)
迴圈內部是要判斷是不是子字串
照人腦的思考,應該就是從頭開始找,
像要在9090999中找90
就從最前面開始,找到就+1
那麼把上述想法轉成程式碼
先宣告一個空的字串
string zero;
再用一個迴圈,把input中每個元素和它右邊的元素,串到zero後面
試著輸出zero看看
結果
達到要的結果了
再跟small比對,之後計算次數,這就完成了
輸出結果
若想閱讀相關文章請關注我的粉絲團
小資菜鳥向前衝
留言列表