洛谷-P1618 三连击(升级版)

洛谷-P1618 三连击(升级版)

原题链接:https://www.luogu.com.cn/problem/P1618


题目描述

将 1,2,…,9 共 9 个数分成三组,分别组成三个三位数,且使这三个三位数的比例是 A:B:C,试求出所有满足条件的三个三位数,若无解,输出 No!!!

输入格式

三个数,A,B,C。

输出格式

若干行,每行 3 个数字。按照每行第一个数字升序排列。

输入输出样例

输入 #1

1 2 3

输出 #1

192 384 576
219 438 657
273 546 819
327 654 981

说明/提示

保证 A<B<C。

C++代码

#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;

int main() {
    int a,b,c,i,j,sum,tempb,tempc,k=0;
    int flag[10],ans[100]={0};
    cin>>a>>b>>c;
    j=__gcd(__gcd(a,b),c);
    a/=j;b/=j;c/=j;
    for(i=100;i<1000;++i)
        if(i%a==0&&c*i/a<1000)
        {
            sum=0;
            memset(flag,0,sizeof(flag));
            tempb=b*i/a;
            tempc=c*i/a;
            flag[i%10]=flag[i/10%10]=flag[i/100]=
            flag[tempb%10]=flag[tempb/10%10]=flag[tempb/100]=
            flag[tempc%10]=flag[tempc/10%10]=flag[tempc/100]=1;
            for(j=1;j<10;++j)
                sum+=flag[j];
            if(sum==9)
                ans[k++]=i;
        }
    if(k>0)
        for(j=0;j<k;++j)
            cout<<ans[j]<<' '<<ans[j]*b/a<<' '<<ans[j]*c/a<<endl;
    else
        cout<<"No!!!"<<endl;
    return 0;
}
原文地址:https://www.cnblogs.com/yuzec/p/12635998.html