日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

(DFS or BFS)Find The Multiple(poj1426)

發布時間:2025/3/12 编程问答 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 (DFS or BFS)Find The Multiple(poj1426) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題目:

給定一個正整數n,請編寫一個程序來尋找n的一個非零的倍數m,這個m應當在十進制表示時每一位上只包含0或者1。你可以假定n不大于200且m不多于100位。
提示:本題采用Special Judge,你無需輸出所有符合條件的m,你只需要輸出任一符合條件的m即可。
Input
輸入包含多組數據,每組數據僅一行,只包含一個正整數n (1 <= n <= 200).
Output
對于輸入的每組n,都輸出任一符合條件的m。即使有多個符合條件的m,你也只需要輸出一個即可。
Sample Input
2
6
19
0
Sample Output
10
100100100100100100
111111111111111111

分析與解答

*10;*10+1最終都會滿足每位上是零或1

先看dfs,由于是深搜,我們假設用y存那個01的結果,x存位數,那么由于答案輸出任意符合條件的,我們讓他位數超過19就不搜了,如果y%m=0說明y就是答案,我們輸出y然后flag=1,讓其他的都return了

其實這題可以用bfs,因為他也是每個結點分了兩個根結點,那么我們可以逐層查找
先建立一個隊列,存那些1,0組成的數,然后把1放到隊列里

queue<long long>Q;Q.push(x);

只要隊列不為空,就取隊首元素,然后把隊首pop了

long long y = Q.front();Q.pop();

最后發、判斷完再放進去兩個新的子結點

Q.push(y*10);Q.push(y*10+1);

代碼參考:
https://blog.csdn.net/super604zong/article/details/60323894

# include <stdio.h> int m, flag;void DFS(int x, long long y) {if(x >19 || flag ==1)//flag是用來保證當找到這個數時可以,終止這條路, {return;}if(y%m == 0){flag = 1;printf("%lld\n",y);return ;} DFS(x+1, y*10);DFS(x+1, y*10+1); }int main(void) { while(~scanf("%d",&m), m){flag = 0;DFS(1, 1);}return 0; } /* # include <stdio.h> # include <queue>using namespace std; int m; void BFS(long long x) {queue<long long>Q;Q.push(x);while(Q.size()) {long long y = Q.front();Q.pop();if(y%m == 0){printf("%lld\n",y);return;}Q.push(y*10);Q.push(y*10+1);} } int main(void) {while(~scanf("%d",&m),m){BFS(1);} return 0; } */

總結

以上是生活随笔為你收集整理的(DFS or BFS)Find The Multiple(poj1426)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。