目录
题目描述
将1,2,…,9 共 9 个数分成三组,分别组成三个三位数,且使这三个三位数的比例是 A:B:CA:B:C,试求出所有满足条件的三个三位数,若无解,输出 No!!!
。
输入格式
三个数,A,B,CA,B,C。
输出格式
若干行,每行 33 个数字。按照每行第一个数字升序排列。
输入输出样例
输入
1 2 3
输出
192 384 576
219 438 657
273 546 819
327 654 981
说明/提示
保证 A<B<CA<B<C。
源代码:
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int b[10];
void go(int x)//分解一个三位数的函数
{
b[x/100] = 1;
b[x/10% 10] = 1;
b[x % 10] = 1;
}
bool check(int x, int y, int z)//检查某种情况是否能够成立的函数
{
memset(b, 0, sizeof(b));
if (x > 999 || y > 999 || z > 999)
return 0;
go(x); go(y); go(z);
for (int i = 1; i < 10; ++i)
{
if (!b[i])
return 0;
}
return 1;
}
int main()
{
long long int A, B, C, x, y, z, cnt = 0;
cin >> A >> B >> C;
for (x = 123; x <= 987; ++x)//列举第一个数的所有情况,另外两个用比例推算
{
if (x*B%A || x * C%A)//如果有出现无法让另外两个数的任何一个不能成为整数就失败
continue;
else
{
y = x * B / A;
z = x * C / A;
}
if (check(x, y, z))//检查是否成立
{
printf("%lld %lld %lld\n", x, y, z);
++cnt;
}
}
if (!cnt)
cout << "No!!!\n";
}
分析思路:
穷举第一个数字的所有情况,用比例推出第二个数字和第三个数字,核验是否符合题意即可。