#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<iostream>
#include<algorithm>
using namespace std;
int ans[105];//存答案
int n;
int j ;//
int flag ;// 标记是否找到
void dfs(int i, int mod, int zero) // i 位数 mod当前余数 zero 全是零的标记
{
if(i > 100)return;// 边界
if((mod*10+1)%n == 0&&zero)// 当 mod == 0 且 不是 全是 0 的结果 就 标记 回溯 存答案
{
flag = 1;
ans[j++] = 1;
return;
}
else dfs(i+1, (mod*10+1)%n, zero|1);
if(flag)
{
ans[j++] = 1;
return;
}
if((mod*10+0)%n == 0&&zero)// 当 mod == 0 且 不是 全是 0 的结果 就 标记 回溯 存答案
{
flag = 1;
ans[j++] = 0;
return;
}
else dfs(i+1, (mod*10+0)%n, zero|0);
if(flag)
{
ans[j++] = 0;
return;
}
}
int main()
{
ios::sync_with_stdio(false);
while(1)
{
flag = 0;
j = 0;
cin>>n;
if(!n)break;
dfs(1, 0 , 0);
int pr = 0;//处理前置 0
for(int i = j-1;i>= 0;i--)
{
if(ans[i])
{
pr = 1;
}
if(pr)
printf("%d", ans[i]);
}
printf("\n");
}
return 0;
}
D - Find The Multiple————DFS
最新推荐文章于 2020-12-27 19:27:03 发布
本文介绍了一种使用深度优先搜索(DFS)算法来寻找循环小数中循环节的解决方案。通过递归调用,算法尝试在每一位上放置0或1,并检查是否形成了一个整数倍的循环节。一旦找到满足条件的序列,结果将被存储并用于后续的输出。
8193

被折叠的 条评论
为什么被折叠?



