求最小值 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

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;}


原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 手术拆线后切口不平怎么办 乳牙透明冠掉了怎么办 配眼镜度数低了怎么办 眼睛高度近视怎么办才能恢复 猎人荒野的呼唤打中一枪后怎么办 凯恩帝数控超程报警怎么办 凯恩帝数控车床x向超程怎么办 别人问你借账号怎么办 微信成夜间模式怎么办 网络电视突然黑屏了怎么办 1adac连接线坏了怎么办 4g的标志没有了怎么办 苹果手机亏电了怎么办 苹果手机亏电了充不进电怎么办 比值审敛法 ρ=1怎么办 比值审敛法中p=1怎么办 电脑被老友重装系统搞坏了怎么办 vivo手机听筒声音小怎么办 小孩调皮幼儿园不收怎么办 小孩听力残疾幼儿园不收怎么办 幼儿园不收外省小孩怎么办 孩子刚上幼儿园哭闹老师怎么办 孕妇糖耐指标高怎么办 貂蝉经常没蓝怎么办 儿童声导抗c型怎么办 酱牛肉不烂怎么办拯救 卤牛肉一切就碎怎么办 牛肉煮的太烂了怎么办 牛肉卤的太烂怎么办 牛肉炖得太软怎么办 牛肉炖的很硬怎么办 牛肉做的有点硬怎么办 牛肉做老了还能怎么办 牛肉粒 炒老了怎么办 牛肉炖出来很硬怎么办 煮的牛肉太硬怎么办 在产蛋鸡体重偏轻怎么办 产蛋鸡不上高峰怎么办 蛋鸡天热下蛋少怎么办 成年鸡嗉子鼓涨怎么办 黄牛拼失败了钱怎么办