UVa 725:Division(水题)

6 篇文章 0 订阅
5 篇文章 0 订阅

题目链接: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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值