UVa 725:Division(水题)

来源:互联网 发布:手机ar软件大全 编辑:程序博客网 时间:2024/04/29 07:32

题目链接:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=841&page=show_problem&problem=666

题意:输入正整数n,按从小到大的书讯输出所有形如abcde/fghij=n的表达式,其中a~j恰好为0~9的一个排列(可以有前导0),2n79。(本段摘自《算法竞赛入门经典(第2版)》)

分析:水题,直接暴力枚举fghij即可。

代码:

#include <fstream>#include <iostream>#include <cstring>#include <algorithm>#include <stack>#include <sstream>#include <string>#include <map>#include <cmath>#include <queue>#include <vector>#include <set>#include <string>#include <vector>using namespace std;const int maxn = 2000 + 5;int n, a, b, c, d, e, f, g, h, i, j, x, y;bool flag, first;bool judge(){    if (f == a || f == b || f == c || f == d || f == e)        return false;    if (g == a || g == b || g == c || g == d || g == e || g == f)        return false;    if (h == a || h == b || h == c || h == d || h == e || h == f || h == g)        return false;    if (i == a || i == b || i == c || i == d || i == e || i == f || i == g || i == h)        return false;    if (j == a || j == b || j == c || j == d || j == e || j == f || j == g || j == h || j == i)        return false;    return true;}int main(){    while (~scanf("%d", &n), n)    {        if (first)            printf("\n");        else            first = true;        flag = true;        for (a = 0; a < 10; ++a)            for (b = 0; b < 10; ++b)                if (b != a)                    for (c = 0; c < 10; ++c)                        if (c != a && c != b)                            for (d = 0; d < 10; ++d)                                if (d != a && d != b && d != c)                                    for (e = 0; e < 10; ++e)                                        if (e != a && e != b && e != c && e != d)                                        {                                            x = a * 10000 + b * 1000 + c * 100 + d * 10 + e;                                            y = x * n;                                            if (y > 99999)                                                break;                                            f = y / 10000;                                            g = (y / 1000) % 10;                                            h = (y / 100) % 10;                                            i = (y / 10) % 10;                                            j = y % 10;                                            if (judge())                                            {                                                flag = false;                                                printf("%d%d%d%d%d / %d%d%d%d%d = %d\n", f, g, h, i, j, a, b, c, d, e, n);                                            }                                        }        if (flag)            printf("There are no solutions for %d.\n", n);    }    return 0;}
0 0
原创粉丝点击