2016年5月4日 星期三

Uva 443 Humble Numbers

題目來源:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=384

這一題在luckycat上有中文翻譯,剛開始看完題目的時候,是用遞迴寫的,但一直跑無窮迴圈@@,最後用了BFS的方法寫,把要處理的元素放入queue中,當queue裡面沒有元素的時候,就會跳出迴圈,這次也學會了一些vector小技巧

因為只要找質因數只有2 3 5 7的數字,那就把2 3 5 7一直乘一直乘就好了吧(?)
但是也不知道要怎麼乘才不會亂掉,最後想到把要乘得數字放入queue中,然後每次都從queue中拿出元素(以下稱t),讓t和 2 3 5 7 相乘,乘出來的元素在放入queue中,還有vector中,但如果t之前有放過了(因為2*5==5*2會有元素重複問題),就不用再放了,最後將vector由小到大排序,程式就大致完成了

因為不知道元素總共有幾個,所以用vector儲存
要先宣告函示庫 #include<vector>
vector宣告方式是 vector <int> a;
放入元素m至vector a中則為 a.push_back(m)

如果要將vector內的元素由小排到大排序
要先宣告函示庫 #include<algorithm>
利用裡面的sort()函式,可以上C++ 的reference上面找使用方法
這裡用最簡單的形式 sort(a.begin(),a.end());//從第一個元素由小到大排到最後一個元素

最後是,因為5*2==2*5 所以有時候得到的數字會重複,重複的數字就不需要在放入queue和vector中了,這時候我就必須要會判斷,10是否已經出現在vector中





程式碼:

沒有留言:

張貼留言

注意:只有此網誌的成員可以留言。