POJ-Find The Multiple
来源:互联网 发布:剪切视频在线软件 编辑:程序博客网 时间:2024/06/08 15:22
Find The Multiple
Time Limit: 1000MS Memory Limit: 10000KTotal Submissions: 33514 Accepted: 14053 Special Judge
Description
Given a positive integer n, write a program to find out a nonzero multiple m of n whose decimal representation contains only the digits 0 and 1. You may assume that n is not greater than 200 and there is a corresponding m containing no more than 100 decimal digits.
Input
The input file may contain multiple test cases. Each line contains a value of n (1 <= n <= 200). A line containing a zero terminates the input.
Output
For each value of n in the input print a line containing the corresponding value of m. The decimal representation of m must not contain more than 100 digits. If there are multiple solutions for a given value of n, any one of them is acceptable.
Sample Input
26190
Sample Output
10100100100100100100111111111111111111
Source
Dhaka 2002
Hint:
即找到一个是n(0<n<200)的倍数且由‘0’和‘1’组成的数,注意此数不可超过unsigned long long的范围,用DFS,BFS均可求解
///BFS
#include <iostream>
#include <queue>
using namespace std;
long long BFS(int n) ///注意返回的一定是long long类型的,否则WA
{
long long m, m1,m2;
queue<long long>q;
q.push(1);
while(!q.empty())
{
m=q.front();
q.pop();
if(m%n==0)
return m;
m1=m*10;
m2=m*10+1;
q.push(m1);
q.push(m2);
}
return 0;
}
int main()
{
int n;
while(cin>>n&&n)
{
cout<<BFS(n)<<endl;
}
return 0;
}
#include <queue>
using namespace std;
long long BFS(int n) ///注意返回的一定是long long类型的,否则WA
{
long long m, m1,m2;
queue<long long>q;
q.push(1);
while(!q.empty())
{
m=q.front();
q.pop();
if(m%n==0)
return m;
m1=m*10;
m2=m*10+1;
q.push(m1);
q.push(m2);
}
return 0;
}
int main()
{
int n;
while(cin>>n&&n)
{
cout<<BFS(n)<<endl;
}
return 0;
}
DFS:
#include <iostream>
using namespace std;
int n,flat;
unsigned long long b;
void DFS(unsigned long long a,int step)
{
if(flat||step==19)///unsigned long long整数有二十位,unsigned即signed的两倍
///例如:unsigned long long:0-18446744073709551615(20位),signed long long:(-+)9223372036854775807(19位)
{
return ;
}
if(a%n==0)
{
printf("%I64u\n",a);///I64U:64位无符号整数
flat=1;///提前终止回溯,防止输出多余的a.
}
else
{
DFS(a*10,step+1);
DFS(a*10+1,step+1);
}
return ;
}
int main()
{
while(scanf("%d",&n),n)
{
flat=0;
DFS(1,0);
}
return 0;
}
using namespace std;
int n,flat;
unsigned long long b;
void DFS(unsigned long long a,int step)
{
if(flat||step==19)///unsigned long long整数有二十位,unsigned即signed的两倍
///例如:unsigned long long:0-18446744073709551615(20位),signed long long:(-+)9223372036854775807(19位)
{
return ;
}
if(a%n==0)
{
printf("%I64u\n",a);///I64U:64位无符号整数
flat=1;///提前终止回溯,防止输出多余的a.
}
else
{
DFS(a*10,step+1);
DFS(a*10+1,step+1);
}
return ;
}
int main()
{
while(scanf("%d",&n),n)
{
flat=0;
DFS(1,0);
}
return 0;
}
[Submit] [Go Back] [Status] [Discuss]
阅读全文
0 0
- poj find the multiple
- Find The Multiple POJ
- POJ.Find The Multiple
- Find The Multiple POJ
- Find The Multiple POJ
- Find The Multiple POJ
- Find The Multiple POJ
- Find The Multiple POJ
- Find The Multiple POJ
- POJ-Find The Multiple
- poj 1426 Find The Multiple
- Poj 1426 Find The Multiple
- POJ 1426 Find the Multiple
- poj 1426Find The Multiple
- POJ 1426 Find The Multiple
- POJ 1426 Find The Multiple
- POJ 1426 Find The Multiple
- POJ 1426 Find The Multiple
- 新闻条目下载
- 【Leetcode】001 Two Sum
- 小学奥数
- KNN算法预测泰坦尼克号乘客生存率
- 【NOIP2011PJ】瑞士轮
- POJ-Find The Multiple
- [Leetcode-64]Minimum Path Sum 二维数组路径最小和
- 深度相机(二)--结构光深度测距
- 笔试笔记(二)
- 大型企业所需掌握技术
- 支持单选,多选,还可以限制选择的数量的android流式布局
- 水晶灯火灵
- com.alibaba.fastjson.JSONException: syntax error, expect {, actual int, pos 0
- 车厢重组( carry. cpp)