找倍数
来源:互联网 发布:java 判断base64编码 编辑:程序博客网 时间:2024/04/28 08:30
描述:
对于每个输入的数字(如:2),则要求 给出一个由1,0构成的十进制整数,且该整数为输入数字的某个倍数,且是满足该条件的最小数(如2对应的10)。
输入:
数字n,n等于0时停止。
输出:
n的一个满足条件的最小倍数。
输入样例:
20
输出样例:
10
#include <iostream>#include <algorithm>using namespace std;int all[20]; //枚举所有可能int n;int flag;void check(){ //第一个非零数 int p = 0; while(all[p] == 0 && p < 20) p++; //全0 if(p == 20) return; if(p == 19) { if(n == 1) { flag = 1; cout << 1 << endl; return; } } else { int i, mod = 0; for(i = p; i < 20; i++) { mod = (mod*10+all[i])%n; } if(mod == 0) { flag = 1; for(i = p; i < 20; i++) { cout << all[i]; } cout << endl; } }}void Search(int m){ if(flag == 1) //找到目标,不必枚举可能 return; if(m == 20) { check(); } else { all[m] = 0; Search(m+1); all[m] = 1; Search(m+1); }}int main(){ while(cin >> n && n) { flag = 0; Search(0); }}
另外给一个超时的代码:
#include <iostream>#include <algorithm>#include <stack>using namespace std;int ans[100];bool bin(int i, int n){ stack<int> s; while(i) { if(i % 2 == 1) s.push(1); else s.push(0); i /= 2; } int k = 0; while(!s.empty()) { ans[k++] = s.top(); s.pop(); } int flag = 0; for(int j = 0; j < k; j++) { flag = (flag*10+ans[j])%n; } if(flag == 0) { for(int j = 0; j < k; j++) cout << ans[j]; cout << endl; return true; } else return false;}int main(){ int n; while(cin >> n && n) //for(int n = 2; n < 100; n ++) { for(int i = 1; i < 1000000; i++) { if(bin(i, n)) break; } }}
0 0
- 找倍数
- 找倍数
- 找倍数
- 找倍数
- NOJ1146 找倍数
- ZOJ 1530 find the multiple 找倍数
- 找倍数(优先队列解法)
- hdu6108(找规律)小C的倍数问题
- 输入一个数,找比他小的最大五的倍数
- HDOJ 题目4474 Yet Another Multiple Problem(bfs,技巧,找一个数的倍数)
- POJ 1426 找倍数 Find The Multiple(枚举+同余模应用)
- 搜索——H——找n的倍数(0,1组成的)
- 约数倍数
- 最小倍数
- 寻找倍数
- 寻找倍数
- [bzoj4314] 倍数?倍数! 解题报告
- bzoj 4314: 倍数?倍数! 数学
- 在CentOS 6.X 上面安装 Python 2.7.X
- java泛型详解
- 设计和实现一个简单的hdfs的备份恢复与容灾系统(1)
- AS常用插件-持续更新
- 64位和32位的寄存器和汇编的比较
- 找倍数
- 二分图的最大匹配:匈牙利算法
- 美丽说demo(纯swift代码)
- Good Java idioms
- 重试C语言之C语言数据类型
- jQuery选择器 笔记
- github下载不成功的解决方法
- oracle使用过的函数-1
- poj1703(并查集分类不同集合)