poj 1426 Find The Multiple
题意:write a program to find out a nonzero multiple m of n whose decimal representation contains only the digits 0 and 1。写一个程序找出一个是n的倍数且只包含0,1的m
看了别人的代码,觉得他的思想特别好,由于bFS所以每次进队列的数是固定的第一个是1,第二个是10,第三个是11,第四个是110,通过推倒可知道,它是很规则的按顺序增长的,所以只要知道,进了i次队列使余数为0,则可以通过i求出、
#include<stdio.h> const int MAXN=600000; int mod[MAXN]; int main() { int i,n; while(scanf("%d",&n) && n) { mod[1]=1%n; for(i=2;mod[i-1]!=0;i++) mod[i]=(mod[i/2]*10+i%2)%n;//i%2可以控制+1或+0 //100的前一个是10,不是1000的前一个是100,又因为这是双口BFS,所以i/2 int cas=0; i--; while(i) { mod[cas++]=i%2; i/=2; } for(i=cas-1;i>=0;i--) printf("%d",mod[i]); printf("\n"); } }
#include<stdio.h> #include<queue> #include<string.h> using namespace std; const int MAXN= 100010; int step[MAXN],vis[MAXN]; queue<int>Q; int BFS(int n,int k) { memset(step,0,sizeof(step)); memset(vis,0,sizeof(vis)); int head,next; step[n]=0; vis[n]=1; Q.push(n); while(!Q.empty()) { head=Q.front(); Q.pop(); for(int i=0;i<3;i++) { if(i==0) next=head-1; if(i==1) next=head*2; if(i==2) next=head+1; if(next>MAXN || next<0) continue; if(!vis[next]) { Q.push(next); vis[next]=1; step[next]=step[head]+1; } if(next==k) return step[next]; } } } int main() { int n,k; while(scanf("%d%d",&n,&k)!=EOF) { int ans=BFS(n,k); printf("%d\n",ans); } return 0; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异