StkOvflow

STACK OVERFLOW!

一言(ヒトコト)

你不是一个人
——lmh

UVA 725 Division

原题Vjudge

题目大意

给你个N
判断有没有两个整数满足AB=N,并且AB的各位数字刚好构成09的一个排列

解题思路

这题乍一看挺难的,但是范围很小(2N79),那我们就可以着手写暴力
将上述等式进行变形,可以得到A=NB,而N是固定的,所以我们只需要算出B
就可以得到A了。对于每对AB我们还需要判断是否构成排列
这个简单,将每位的数字做一个桶计数,然后看看是不是从09都有就行了

枚举细节

关于这个枚举,我们可以得到B是四位数,而且A是五位数,那么可以得到
对于任意的B合法,有1234B98765÷n
所以可以这样枚举我们的B

for (int B = 1234; B * n <= 98765; B ++ ) 

代码实现

#include <iostream>
#include <cstring>

using namespace std;

int st[15], n, kase;

bool isPerm(int B, int A) 
{
    memset(st, 0, sizeof st);
    if (A > 98765) return false ;
    
    for (int i = 0; i < 5; i ++ ) 
    {
        st[A % 10] ++, st[B % 10] ++ ;
        A /= 10, B /= 10;
    }
    for (int i = 0; i < 10; i ++ )
        if (st[i] != 1) return false ;
    return true ;
}

int main()
{
    while (scanf("%d", &n), n) 
    {
        if (kase ++ > 0) printf("\n"); // 恶心的输出
        
        bool soul = false; //是否有解
        for (int B = 1234; B * n <= 98765; B ++ ) 
        {
            if (isPerm(B, n * B)) //能否构成排列
            {
                printf("%05d / %05d = %d\n", n * B, B, n);
                soul = true ; //有解
            }
        }
        if (!soul) printf("There are no solutions for %d.\n",n);
    }
    
    return 0;
}

Accepted!!

posted @   StkOvflow  阅读(23)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
点击右上角即可分享
微信分享提示