题目描述 Description
将1,2,…,9共9个数分成三组,分别组成三个三位数,且使这三个三位数构成A:B:C的比例,试求出所有满足条件的三个三位数,若无解,输出“No!!!”。
输入输出格式 Input/output
输入格式:
三个数,A B C。
输出格式:
若干行,每行3个数字。按照每行第一个数字升序排列。
三个数,A B C。
输出格式:
若干行,每行3个数字。按照每行第一个数字升序排列。
输入输出样例 Sample input/output
样例测试点#1
输入样例:
1 2 3
输出样例:
192 384 576
219 438 657
273 546 819
327 654 981
说明 description
保证A<B<C
思路:从(1~1000/c)循环,然后按比例赋值,每一位数放入一个数组的每一位,判断有多少个数字被用过了,如果有9个(也就是刚好用完),输出即可
提示:记得判断按比例赋值后是否超过了1000,超过了跳出即可
代码如下:
#include<iostream>
using namespace std;
int main()
{
int a,b,c,x[],a1,a2,a3;
int y=,ans=,flag[]={},i,j; //用flag统计数字是否用过
cin>>a1>>a2>>a3; //输入
for(j=;j<=/a3;j++)
{
y=;
for(i=;i<;i++)
flag[i]=; //全归0
a=a1*j;
b=a2*j; //按比例赋值
c=a3*j;
if(a>=||b>||c>)
break; //超出范围的情况
/*=================================*/
x[]=a/;
x[]=(a/)%;
x[]=a%;
x[]=b/;
x[]=(b/)%; //把每一位数放入数组中
x[]=b%;
x[]=c/;
x[]=(c/)%;
x[]=c%;
/*=================================*/
for(i=;i<;i++)
flag[x[i]-]=; //统计用过的数(用过就变成1)
for(i=;i<;i++)
y+=flag[i]; //统计用过多少个
if(y==) //如果y=9的话,就代表所有数都用过,输出
{
cout<<a<<" "<<b<<" "<<c<<endl;
ans++; //有满足的a b c,ans就不等于0
}
}
if(!ans) //没有满足的,输出No!!!
cout<<"No!!!";
}