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 }
时间: 05-28

Uva 725 Division的相关文章

UVa 725 Division --- 简单枚举

题目链接: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=666 /* UVa 725 Division --- 简单枚举 */ #include <cstdio> #include <cstring> bool used[10]; /* 判断传进来的两个数是否满足条件 */ bool judge(int a, i

uva 725 Division(除法)暴力法!

uva 725  Division(除法) A - 暴力求解 Time Limit:3000MS     Memory Limit:0KB     64bit IO Format:%lld & %llu Description Write a program that finds and displays all pairs of 5-digit numbers that between them use the digits 0 through 9 once each, such that t

UVA 725 Division ( 找出 abcde / fghij = N的形式—— 暴力枚举 )

Division Time Limit:3000MS     Memory Limit:0KB     64bit IO Format:%lld & %llu Description Write a program that finds and displays all pairs of 5-digit numbers that between them use the digits 0 through 9 once each, such that the first number divide

uva 725 Division(暴力枚举)

uva 725  Division Write a program that finds and displays all pairs of 5-digit numbers that between them use the digits 0 through 9 once each, such that the first number divided by the second is equal to an integer N, where . That is, abcde / fghij =

暴力枚举 UVA 725 Division

题目传送门 1 /* 2 暴力:对于每一个数都判断,是否数字全都使用过一遍 3 */ 4 #include <cstdio> 5 #include <iostream> 6 #include <algorithm> 7 #include <cmath> 8 #include <cstring> 9 #include <string> 10 #include <map> 11 #include <set> 12

[2016-02-18][UVA][725][Division]

时间:2016-02-18 22:41:48 星期四 题目编号:UVA 725 题目大意:给定 n,输出所有情况:abcde / fghij = n ,使得 a~j为0~9的一个排列 方法: 枚举fghij ,通过 fghij * n 得到 abcde,看是否满足 前导0输出是 %05d 解题过程遇到问题: 每组数据间有空行,最后一组数据后面没有空行 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 2

UVa 725 - Division(枚举简单题)

今日无事,写篇日记.这是我写的第一道uva题(uva是算法竞赛入门经典里使用例题的题目来源),正值暑假,前几天看了书上中文题目和解析,玩了几日san11,又重拾起acm,今天晚上写了一下还是花了点时间. 题目:给你一个数字n,用0~9,10个数字组成两个五位数,使得他们的商为n,按顺序输出所有结果. 1.这里的除法不是c中的除(/)而是整除,一开始以为是整除,但那样79546 / 01283 = 62是一组解,79546+1 / 01283 = 62也是一组解了. 2.复杂度:枚举分子然后分子乘

UVA 725 Division(hash+枚举)

题目大意: 就是说给你一个abcde/fghij = n的表达式,给你一个n,让你求出有多少个这样的式子. 解题思路: 最为简单的枚举了,要注意到我们只需要枚举出来fghij就可以了,因为abcde=fghij*n,这样的话,时间复杂度由10!就 降低到了5!,在枚举结束后,我们只需要判断0-9这些数字是否都出现了且仅出现一次即可.然后对于超过5位的数字,我们 直接break掉. 这道题的输出一定要注意那个前导0,,一开始忘记了,WA了两次,然后果断用setw(5)和setfill('0')给搞

uva 725 DIVISION (暴力枚举)

我的56MS 1 #include <cstdio> 2 #include <iostream> 3 #include <string> 4 #include <cstring> 5 #include <queue> 6 #include <vector> 7 #include <map> 8 #include <cmath> 9 using namespace std; 10 11 #define MEM(a