时间限制1.00s 内存限制125.00MB 难易度:普及/提高−
【题目描述】
2008 北京奥运会,你想成为四川汶川的一名火炬手,经过层层选拔,终于到了最后一关。
这一关是一道很难的题:任意给定一个正整数 N,求一个最小的正整数 M,使得 N×M 的十进制表示形式里只含有 1
和 0
。
【输入格式】
一行一个正整数 N。
【输出格式】
输出一行,如果有解,输出一个整数,表示最小的 M,否则输出 No Solution
。
【输入输出样例】
输入 #1
12
输出 #1
925
【说明/提示】
1≤N≤10^5
【算法分析】
这道题挺难的,总是TLE,下面是深搜代码,先求n和m的积,m=nm/n
【参考代码】
#include<bits/stdc++.h>
using namespace std;
long long n,nm,m;
void dfs(long long num,int step)
{
if(step==20) return; //边界。
if(num%n==0&&(num<nm||nm==0)) nm=num; //求n和m的乘积。
dfs(num*10,step+1); //下一位是0。
dfs(num*10+1,step+1); //下一位是1。
}
int main()
{
cin>>n;
dfs(1,1);
if(nm!=0) //如果n和m的乘积不是初始值了。
{
m=nm/n;
cout<<m;
}
else cout<<"No Solution"; //如果仍是初始值即没有符合条件的m。
return 0;
}