将 1,2,…,91,2,…,9 共 99 个数分成三组,分别组成三个三位数,且使这三个三位数的比例是 A:B:C,试求出所有满足条件的三个三位数,若无解,输出 No!!!
。
输入格式
三个数,A,B,C。
1 2 3
输出格式
若干行,每行 33 个数字。按照每行第一个数字升序排列。
192 384 576 219 438 657 273 546 819 327 654 981
这道题可以用蛮力法来解题。我们这道题没有用三个for来判断xyz,我们取其中一个就可以了。其余两个都是满足关系的。
#include<bits/stdc++.h>
using namespace std;
int b[10];
void go(int x)//这个是将其中的一个数进行拆分,把每一位数字都统计到数组中,方便后面来比较是否缺少数
{
b[x%10]=1;
b[x/10%10]=1;
b[x/100]=1;
}
bool check(int x,int y,int z)//来判断三个数是否是满足比例的关系
{
memset(b,0,sizeof(b));//将数组b进行初始化
if(y>999||z>999) return 0;
go(x),go(y),go(z);
for(int i=1;i<=9;i++)//判断1到9中是不是每一个都有
if(!b[i]) return 0;//如果不满足就返回0
return 1;//满足就返回1
}
int main ()
{
long long a,b,c,x,y,z,cnt=0;//我们不用三个循环,只取一个数字,其余的数字都会求出
cin>>a>>b>>c;
for(int x=123;x<=987;x++)//我们以x为开始
{
y=x*b/a,z=x*c/a;//分别求出另外两个数
if(check(x,y,z)) {//调用函数
cout<<x<<" "<<y<<" "<<z<<endl;
cnt++;
}
}
if(!cnt) cout<<"No!!!";
return 0;
}