poj 1426 Find The Multiple(DFS或打表)

来源:互联网 发布:java发邮件excel附件 编辑:程序博客网 时间:2024/05/22 00:23

大概题意就是找出一个1~200间的一个数字n,找出一个只由1,0组成的数m,使m被n整除。

第一种 思路是dfs,搜到一种满足题意的答案就ok了。

用的时间比较多。

用unsigned long long 解决了大数问题。

代码:

#include<stdio.h>int n;bool flag;void dfs(unsigned long long a,int dep){    if(flag||dep==19)        return ;    if(a%n==0)    {        flag=1;        printf("%I64u\n",a);        return ;    }    else    {        dfs(a*10,dep+1);        dfs(a*10+1,dep+1);    }    return ;}int main(){    while(scanf("%d",&n)!=EOF)    {        if(n==0)            break;        flag=0;        dfs(1,0);    }    return 0;}

第二种思路是打表,不用考虑大数问题:

因为数据比较少,所以考虑把所有数都打出来。

首先打表的代码:

#include<stdio.h>int n;bool flag;unsigned long long max;FILE *fout = fopen ("num.txt", "w");void dfs(unsigned long long a,int dep){    if(flag||dep==19)        return ;    if(a%n==0)    {        flag=1;        fprintf(fout,"\"%I64u\",",a); //打出两百个数的表        if(a>max)            max=a;        return ;    }    else    {        dfs(a*10,dep+1);        dfs(a*10+1,dep+1);    }    return ;}int main(){    max=0;    for(n=1; n<=200; n++)    {        flag=0;        dfs(1,0);    }    fprintf(fout,"\n%I64u",max);//寻找最大一个数有多少位    return 0;}

0s杀的代码:

#include<stdio.h>char num[][20]={"1","10","1000000000000000011","100","10","1000000000000000110","1000000000000000111","1000","1000000000011111111","10","100000000000000001","1000000000000001100","1000000000000001","10000000000000010","1000000000000000110","10000","10000000000000101","1000000000111111110","1000000000000001101","100","10000000000000101","1000000000000000010","1000000000000010111","1000000000000011000","100","10000000000000010","1000000000101111111","100000000000000100","1000000000000000111","1000000000000000110","1000000000000110011","100000","1000000000000101111","100000000000001010","10000000000000010","1000000001111111100","100000000000000011","10000000000000110","10000000000000101","1000","1000000000000010111","100000000000001010","1000000000000010101","100000000000000100","1000000000111111110","100000000000001110","1000000000000101","1000000000000110000","1000000000000011101","100","10000000000000101","100000000000000100","1000000000000000011","1000000001101111110","1000000000000000010","1000000000000001000","1000000000000011","1000000000000001010","10000000000000011","1000000000000001100","1000000000000011","100000000001110010","1000000001011101111","1000000","10000000000000010","1000000000000111110","100000000000011","1000000000000010100","100000000000011","10000000000000010","1000000000000100101","1000000011111111000","1000000000001","1000000000000000110","1000000000000001100","100000000000001100","1000000000000001","100000000000001010","100000000000110001","10000","1000000000111111101","1000000000000110110","100000000000001101","1000000000000010100","100000000000001010","100000000000010010","100000000000000101","1000000000000001000","1000000000000011011","1000000000111111110","1000000000000001","1000000000000011100","1000000000001111001","10000000000001010","10000000000000110","1000000000001100000","100000000001111","1000000000000111110","1101111111111111111","100","1000000000000000001","100000000000001010","100000000000000001","1000000000000001000","100000000000001010","100000000010000110","10000000000001001","1000000001111111100","1000000000001000011","1000000000000000010","100000000000000011","100000000000110000","1000000000000111101","10000000000000110","100000000000001110","10000000000000100","1000000001101111101","100000000000000110","10000000000000101","1000000000000011000","1000000000000101111","10000000000000110","1000000001100011001","1000000000011100100","1000","1000000001111011110","1000000000000110101","10000000","10000000000001001","10000000000000010","10000000001101","1000000000010111100","1000000000001010001","1000000000000110","1000000001101111110","100000000000111000","1000000000001","1000000000000110","1000000000001001111","100000000000000100","1000000000000101","1000000000011110","1000000000000001","1000000111111110000","1000000000000001010","10000000000010","100000000000011111","1000000000000010100","10000000000001111","1000000000000001100","1000000000010111001","1000000000000011000","1000000000111111101","10000000000000010","100000000001110010","1000000000000010100","1000000000000101","1000000000001100010","1000000000000000011","100000","1000000000001101001","100000000111111110","1000000000011011101","1000000000001110100","1000000000000111110","1000000000000011010","1000000000001001101","10000000000011000","1000000000001100111","100000000000001010","1000000000111111011","1000000000000100100","1000000000000010111","1000000000000001010","100000000000000100","100000000000010000","10000000000000011","100000000000001110","1000000000000100111","1000000001111111100","10000000000000111","10000000000000010","1000000000000011","100000000000011000","1000000000000000110","10000000001101110","100000000001001001","100000000000010100","1000000010111010111","10000000000000110","1000000000011111101","1000000000011000000","1000000010000100001","1000000000011110","100000000000001010","100000000010010100","100000000000111001","1111111111111111110","1000000000101111001","1000"};int main(){    int n;    while(scanf("%d",&n)!=EOF)    {        if(n==0)            break;        printf("%s\n",num[n-1]);    }    return 0;}


0 0
原创粉丝点击