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