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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

51Node 01组成的N的倍数

發(fā)布時間:2024/4/18 编程问答 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 51Node 01组成的N的倍数 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

給定一個自然數(shù)N,找出一個M,使得M > 0且M是N的倍數(shù),并且M的10進制表示只包含0或1。求最小的M。
例如:N = 4,M = 100。

輸入
輸入1個數(shù)N。(1 <= N <= 10^6)

輸出
輸出符合條件的最小的M。

輸入樣例
4
輸出樣例
100

這里要用到的一個重要知識點是同余定理:若 a % b = c,則ax%b = cx % b;
還有就是已經(jīng)確定不可以的余數(shù)我們要把它拋棄,假如m % b != 0,那么以后余數(shù)為m的將不予以考慮!(剪枝)

整體就好比一個二叉樹,所以我們進行BFS;
例 若 N = 4

所以我們可以大概可以了解起過程。
我們看代碼:

#include <iostream> #include <cstdio> #include <cstring> #include <cstdlib> #include <algorithm> #include <cmath>#define N 1000000 using namespace std; int b[] = {0,1};struct Node{int data;int pre;int k; }a[N];int ans[N]; bool visited[N]; void BFS(int n) {int front = 0,rear = 0,t;//初始化隊列a[0].data = 1; //初始化隊列中的到一個節(jié)點! a[0].k = a[0].data % n; //a[0].pre = -1; //rear ++;while (front < rear){//cout<<front<<endl; for (int i = 0;i < 2;i++){a[rear].data = b[i];a[rear].pre = front;//前驅節(jié)點置成front。a[rear].k = (a[front].k*10 + b[i]) % n;//利用同余定理我們得到第rear位置的余數(shù)。if (!visited[a[rear].k]) //判斷a[rear].k這個余數(shù)是否出現(xiàn)過{visited[a[rear].k] = true; //將a[rear].k的狀態(tài)置成已出現(xiàn)。if (a[rear].k == 0) //如果a[rear].k == 0,說明已經(jīng)出現(xiàn)了滿足條件的值{t = 0;while (a[rear].pre != -1)//向前遍歷查找自己的前驅節(jié)點{times++;//cout<<a[rear].data;ans[t] = a[rear].data;t++;rear = a[rear].pre;}ans[t] = a[0].data;for (int j = t;j >= 0;j--)//倒序將其輸出!!{cout<<ans[j];}return ;}rear ++;}} front ++;} } int main(){int n;while (cin>>n && n)//for (int n = 1;n <= 200;n++){memset(visited,false,sizeof(visited));if (n == 1) {cout<<1<<endl;continue;}memset(a,-1,sizeof(a));BFS(n);cout<<endl; }return 0; }

Bfs思想,同余定理,剪枝是本題的亮點。

與50位技術專家面對面20年技術見證,附贈技術全景圖

總結

以上是生活随笔為你收集整理的51Node 01组成的N的倍数的全部內容,希望文章能夠幫你解決所遇到的問題。

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