[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

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

#include <vector>

#include <list>

#include <map>

#include <set>

#include <deque>

#include <queue>

#include <stack>

#include <bitset>

#include <algorithm>

#include <functional>

#include <numeric>

#include <utility>

#include <sstream>

#include <iostream>

#include <iomanip>

#include <cstdio>

#include <cmath>

#include <cstdlib>

#include <cctype>

#include <string>

#include <cstring>

#include <cstdio>

#include <cmath>

#include <cstdlib>

#include <ctime>

using namespace std;

typedef long long LL;

#define CLR(x,y) memset((x),(y),sizeof((x)))

#define FOR(x,y,z) for(int (x)=(y);(x)<(z);(x)++)

#define FORD(x,y,z) for(int (x)=(y);(x)>=(z);(x)--)

#define FOR2(x,y,z) for((x)=(y);(x)<(z);(x)++)

#define FORD2(x,y,z) for((x)=(y);(x)>=(z);(x)--)

int check(int a,int b){

        if(b > 98765)   return 0;

        int vis[10],k,cnt = 0;

        CLR(vis,0);

        while(a){

                k = a % 10;

                if(vis[k])   return 0;

                else ++vis[k];

                a /= 10;

        }

        while(b){

                k = b % 10;

                if(vis[k])   return 0;

                else ++vis[k];

                b /= 10;

        }

        FOR(i,1,10){

                if(vis[i])      ++cnt;

        }

        return cnt == 9;

}

int main(){

        int n,cntcase = 0;

        while(~scanf("%d",&n) && n){

                if(cntcase++)     puts("");

                int cnt = 0;

                for(int i = 01234;i <= 98765;++i){

                        if(check(i,i*n)){

                                ++cnt;

                                printf("%05d / %05d = %d\n",i*n,i,n);

                        }

                }

                if(!cnt)  printf("There are no solutions for %d.\n",n);

        }

    return 0;

}



来自为知笔记(Wiz)

时间: 2024-10-29 19:05:35

[2016-02-18][UVA][725][Division]的相关文章

暴力枚举 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

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(枚举简单题)

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

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

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

UVA 725 Division(hash+枚举)

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