Uva 725 Division

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Uva 725 Division相关的知识,希望对你有一定的参考价值。

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的主要内容,如果未能解决你的问题,请参考以下文章

UVA 725 division暴力枚举

uva 725 Division

UVA 725 Division

UVA - 725 Division

枚举专项练习_Uva725(Division)_Uva11059(Maximun Product)

UVA725 除法 (Division )