題目是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
11 1110111

2
4

從輸入開始,要有兩個整數

這題可以判斷為需要用到迴圈,而迴圈要有範圍

這個範圍應該可以想到是兩個整數的長度

但如果宣告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比對,之後計算次數,這就完成了

輸出結果

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

小資菜鳥向前衝

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

文章標籤
創作者介紹

cychss6305的部落格

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