uva725division

来源:互联网 发布:淘宝绑定优酷怎么取消 编辑:程序博客网 时间:2024/05/21 18:50

为祖国母亲庆生,这几天不去玩了,多写题!
心路历程这个题吧,主要是我一开始读题的问题,我一开始以为是任意的数字来做,后来发现不是,得是0~9都出现一次,然后就是这么回事,一个一个去枚举,从1234,到50000,但是有个一个是输出,最后一行不能有换行,必须是开始的时候换行,还有就是如果i*n>98765的时候应该return false,然后就基本就行了。

#include<cstdio>#include<algorithm>#include<cstring>using namespace std;int num[12] ,vis[12];bool check(int n , int m){    memset(vis , 0 , sizeof(vis));    memset(num , 0 , sizeof(num));    int ans = 0;    int x = n;    if(n > 98765) return 0;    while(n > 0){        if(vis[n % 10]) return 0;        else vis[n % 10] = 1,num[n % 10] = 1;        n /= 10;    }    while( m > 0){        if(vis[m % 10]) return 0;        else vis[m % 10] = 1,num[m % 10] = 1;        m /= 10;    }    if(x < 98765) num[0] = 1;    for(int i = 0 ; i < 10 ; i++){        ans += num[i];    }    if(m == 1283)       printf("ans = %d",ans);    return ans == 10;}int main(){    int n , cnt = 0;    while(scanf("%d",&n)&&n){        if(n == 0) break;        if(cnt++) printf("\n");        int flag = 1;        for(int i = 1234 ; i <= 50000 ; i++){            if(check(i * n , i)){                if(i<=9876) printf("%05d / 0%04d = %d\n",i*n,i,n);                else printf("%05d / %05d = %d\n",i*n,i,n);                flag = 0;            }        }        if(flag)            //printf("There are no solutions for %d.\n",n);            printf("There are no solutions for %d.\n",n);        //printf("\n");    }    return 0;}
0 0
原创粉丝点击