洛谷-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;
}