hdu1426搜索
2015-09-24 21:24
253 查看
http://poj.org/problem?id=1426
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
2
6
19
0
Sample Output
10
100100100100100100
111111111111111111
题意,找出任意一个由0和1组成的数能整除n。
一开始bfs超时
dfsAC
生找
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
2
6
19
0
Sample Output
10
100100100100100100
111111111111111111
题意,找出任意一个由0和1组成的数能整除n。
一开始bfs超时
#include <iostream> #include <queue> using namespace std; int n; long long num; long long bfs() { queue<long long>q; q.push(1); while(!q.empty()) { num=q.front(); q.pop(); if(num%n==0) break; q.push(10*num); q.push(10*num+1); } return num; } int main() {while(cin>>n&&n) { bfs(); cout<<num<<endl; } return 0; }
dfsAC
#include <iostream> #include <cstdio> using namespace std; bool found; int n; void dfs(unsigned long long num,int deep) { if(found) return; if(num%n==0) { found=true; cout<<num<<endl; return; } if(deep>=19)//搜索第19就返回.20位装不下了 return; dfs(num*10,deep+1); dfs(num*10+1,deep+1); } int main() { while(cin>>n&&n) { found=false; dfs(1,0); } return 0; }
生找
#include <iostream> #include <cstdlib> #include <cstdio> #include <cstring> using namespace std; int n; long long q[maxn]; long long work() { int front = 0; int rear = 0; q[rear++] = 1; while (1) { long long temp = q[front++]; if ((temp * 10) % n == 0) return temp * 10; if ((temp * 10 + 1) % n == 0) return temp * 10 + 1; q[rear++] = temp * 10; q[rear++] = temp * 10 + 1; } return -1; } int main() { // for (n = 1; n <= 200; n++) // printf("%lld\n", work()); while (scanf("%d", &n), n) printf("%lld\n", work()); }
相关文章推荐
- XMPP didReceivePresenceSubscriptionRequest函数不执行解决办法
- 通过bundle对象实现Fragment之间的传值
- lintcode-线段树的构造-201
- 【Android】openGL单位光的问题
- win7跨网段共享解决方法
- 实现读入一个彩色视频文件并以灰度格式输出这个视频文件,学习opencv例2-10
- 电源选型
- [转]漫谈数据中心CLOS网络架构
- eclipse struts2 错误及解决方法
- popupWindow的用法(1)
- Android综合小练习Fragment,解析,Handler,ViewPager
- 对数值数据的格式化处理(保留小数点后N位)
- Zabbix分布式监控--Mysql安装
- 软考视频初步总结
- HDU - 3732 Ahui Writes Word(多重背包)
- HDU 4912 Paths on the tree(LCA+贪心)
- ZOJ 3829 Known Notation 贪心
- 登录同步多个副本如何实现的拷贝数发生变化分布式
- LeetCode:Find Peek Element
- CF479 Riding in a Lift