4 算法1-3 三连击(升级版)
题目描述
将 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。
#include<iostream>
using namespace std;
int a, b, c;
int n1, n2, n3, arr[10], flag, cnt;
int main()
{
cin>>a>>b>>c;
for(int num=1; num<=1000/c; num++) //num是“单位数”
{
n1 = num * a;
n2 = num * b;
n3 = num * c;
//统计1-9每个数字出现的次数
for(int i=1; i<=3; ++i)
{
arr[n1%10]++;
n1 = n1 / 10;
}
for(int i=1; i<=3; ++i)
{
arr[n2%10]++;
n2 = n2 / 10;
}
for(int i=1; i<=3; ++i)
{
arr[n3%10]++;
n3 = n3 / 10;
}
for(int i=1; i<=9; ++i)
{
if(arr[i] != 1) //如果有数字不是只出现一次
{
flag = 1;
break;
}
}
if(!flag)
{
cout<<num*a<<" "<<num*b<<" "<<num*c<<endl;
cnt++;
}
else flag = 0;
for(int i=1; i<=9; ++i) //每找完一组数就清零
{
arr[i] = 0;
}
}
if(!cnt) cout<<"No!!!";
return 0;
}