求最小值 HNUST 1874(DFS模板)
来源:互联网 发布:为知笔记 微博收藏 编辑:程序博客网 时间:2024/06/03 18:50
题目描述
给定一个小于99的正整数n, 编写函数找一个最小的m, 使得m为n的倍数, 且m的各个位数仅由1和0组成.
例如输入:
5
20
98
则输出:
10
100
11000010
输入
测试数据有多组。
每行输入一个正整数 n (0 < n < 99)。
输出
与输入相对应,每行输出一个表示结果的整数m。
样例输入
5
20
98
样例输出
10
100
3.利用普通的倍数关系找出由0和1组成的数组,打表即可。
给定一个小于99的正整数n, 编写函数找一个最小的m, 使得m为n的倍数, 且m的各个位数仅由1和0组成.
例如输入:
5
20
98
则输出:
10
100
11000010
输入
测试数据有多组。
每行输入一个正整数 n (0 < n < 99)。
输出
与输入相对应,每行输出一个表示结果的整数m。
样例输入
5
20
98
样例输出
10
100
11000010
思路:
1.DFS构造出数组,然后判断即可,判断倍数的时候,数组的元素要大于数字且取余为0
#include <iostream>#include <cstdio>#include <algorithm>using namespace std;typedef long long ll;ll a[150000],n;int ipos=0;void DFS(ll sum,ll cnt){ sum=sum*10+1; cnt++; a[ipos++]=sum; if(cnt==13) return; else DFS(sum,cnt); sum=(sum-1)/10; sum=sum*10; a[ipos++]=sum; if(cnt==13) return; else DFS(sum,cnt); cnt--;}int main(){ DFS(0,0); sort(a,a+ipos-1); while(scanf("%lld",&n)==1) { for(int i=0; i<ipos; i++) { if(a[i]%n==0&&a[i]>=n) { printf("%lld\n",a[i]); break; } } }}
2.利用循环构造出和1一样的数组,但是循环是有顺序的构造,所以不需要快速排序。
#include<iostream>#include<cmath>#include<algorithm>using namespace std;long long num[10000]={1},cnt=1;void order_number(){ for(int i=2;i<=13;i++) for(int j=pow(2,i-2)-1;j<pow(2,i-1)-1;j++) { num[cnt++]=num[j]*10; num[cnt++]=num[j]*10+1; }}int main(){ order_number(); int n; while(cin>>n) { for(int i=0;i<=cnt;i++) if(num[i]%n==0) { cout<<num[i]<<endl; break; } } return 0;}
3.利用普通的倍数关系找出由0和1组成的数组,打表即可。
#include<bits/stdc++.h>using namespace std;long long int s[98]= {1,10,111,100,10,1110,1001,1000,111111111,10,11,11100,1001,10010,1110,10000,11101,1111111110,11001,100,10101,110,110101,111000,100,10010,1101111111,100100,1101101,1110,111011,100000,111111,111010,10010,11111111100,111,110010,10101,1000,11111,101010,1101101,1100,1111111110,1101010,10011,1110000,1100001,100,100011,100100,100011,11011111110,110,1001000,11001,11011010,11011111,11100,100101,1110110,1111011111,1000000,10010,1111110,1101011,1110100,10000101,10010,10011,111111111000,10001,1110,11100,1100100,1001,101010,10010011,10000,1111111101,111110,101011,1010100,111010,11011010,11010111,11000,11010101,1111111110,1001,11010100,10000011,100110,110010,11100000,11100001,11000010};int main(){ int n; while(scanf("%d",&n)!=EOF) { printf("%lld\n",s[n-1]); } return 0;}*/#include<bits/stdc++.h>using namespace std;long long int s[8192];int main(){ s[1]=1; for(int i=1;i<4096;i++) { for(int j=0;j<2;j++) { s[i*2+j]=s[i]*10+j; } } sort(s,s+8192); /*for(int i=1;i<8192;i++) { printf("%lld\n",s[i]); }*/ int n; while(scanf("%d",&n)!=EOF) { for(int i=1;i<8192;i++) { if(s[i]%n==0) { printf("%lld\n",s[i]); break; } } } return 0;}
阅读全文
0 0
- 求最小值 HNUST 1874(DFS模板)
- HNUST 挑战ACM迷宫(DFS)
- HNUST 1442 排列问题(顺序排列模板)
- poj1190,DFS/已知一个等式,求另一个最小值
- nyoj 119 士兵杀敌(三) <模板RMQ--静态数组时求最大最小值>
- 求最大最小值(转)
- 求最小值
- 求最小值
- 模板:线段树求区间最大/最小值及下标
- hnust
- hnust
- hnust
- hnust
- hnust
- hnust
- hnust
- hnust
- hnust
- Python3 学习杂记
- 【MapReduce实例】数据去重
- 枚举,注解
- [日常记录]2017-12-05
- spring task的详细使用
- 求最小值 HNUST 1874(DFS模板)
- Codeforces-86D:Powerful array(莫队算法)
- CentOS 7安装npm和cnpm
- HDU1228A + B
- jdk环境变量安装及配置
- 设计模式之访问者模式
- 最最最基础(html)1-3
- ubuntu中利用Anaconda安装tensorflow
- 题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?(java)