码迷,mamicode.com
首页 > 其他好文 > 详细

Uva 725 Division

时间:2016-05-29 23:13:05      阅读:141      评论:0      收藏:0      [点我收藏+]

标签:

0.不要傻傻的用递归去构造出一个五位数来,直接for循环最小到最大就好,可以稍微剪枝一丢丢,因为最小的数是01234 从1234开始,因为倍数n最小为2 而分子是一个最多五位数,所以分母应该小于五万。 所以for 1234 到50000-1就行了。哦还有个同理,fenmu*n>=十万的可以直接扔掉了

1.还有个判断重复的时候直接这样就好了

while(i)
    {
            num[i%10]=1;
            i/=10;
    }
    while(j)
    {
            num[j%10]=1;
            j/=10;
    }
    for(int i=1;i<10;i++)
        num[0]+=num[i];
    if(num[0]==10)
    {
        printf("%d / %05d = %d\n",fenzi,fenmu,n);
        ok=true;
    }

2.别忘了  当分子小于一万的时候 记得num[0]=1  0是被用掉的这时候

3.!!!scanf控制格式的时候 真的 真的 真的 很好用  %nd (n是一个数字)  就代表着输出%d那个数字 然后不足n位 从左边开始用空格补全   %0nd 就代表着输出%d那个 数字 然后不足n位 从左边开始用0补全

 

 1 #include <cstdio>
 2 #include <cstring>
 3 int n;
 4 bool ok;
 5 int num[12];
 6 void solve(int i,int j)
 7 {
 8     int fenmu=i,fenzi=j;
 9     if(i<10000) num[0]=1;
10     while(i)
11     {
12             num[i%10]=1;
13             i/=10;
14     }
15     while(j)
16     {
17             num[j%10]=1;
18             j/=10;
19     }
20     for(int i=1;i<10;i++)
21         num[0]+=num[i];
22     if(num[0]==10)
23     {
24         printf("%d / %05d = %d\n",fenzi,fenmu,n);
25         ok=true;
26     }
27 }
28 int main()
29 {
30     int flag=0;
31     while(~scanf("%d",&n))
32     {
33         if(n==0) break;
34         if(flag) printf("\n");
35         flag=1;
36 
37         ok=false;
38         for(int i=1234;i<50000;i++)
39         {
40             memset(num,0,sizeof(num));
41             int j=i*n;
42             if(j>=100000) continue;
43             solve(i,j);
44         }
45         if(!ok) printf("There are no solutions for %d.\n",n);
46     }
47     return 0;
48 }

 

Uva 725 Division

标签:

原文地址:http://www.cnblogs.com/luosuo10/p/5540583.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!