题目描述 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,超过了跳出即可
代码如下:
1 #include<iostream> 2 using namespace std; 3 int main() 4 { 5 int a,b,c,x[9],a1,a2,a3; 6 int y=0,ans=0,flag[10]={0},i,j; //用flag统计数字是否用过 7 cin>>a1>>a2>>a3; //输入 8 for(j=1;j<=1000/a3;j++) 9 { 10 y=0; 11 for(i=0;i<9;i++) 12 flag[i]=0; //全归0 13 a=a1*j; 14 b=a2*j; //按比例赋值 15 c=a3*j; 16 if(a>=1000||b>1000||c>1000) 17 break; //超出范围的情况 18 /*=================================*/ 19 x[0]=a/100; 20 x[1]=(a/10)%10; 21 x[2]=a%10; 22 x[3]=b/100; 23 x[4]=(b/10)%10; //把每一位数放入数组中 24 x[5]=b%10; 25 x[6]=c/100; 26 x[7]=(c/10)%10; 27 x[8]=c%10; 28 /*=================================*/ 29 for(i=0;i<9;i++) 30 flag[x[i]-1]=1; //统计用过的数(用过就变成1) 31 for(i=0;i<9;i++) 32 y+=flag[i]; //统计用过多少个 33 if(y==9) //如果y=9的话,就代表所有数都用过,输出 34 { 35 cout<<a<<" "<<b<<" "<<c<<endl; 36 ans++; //有满足的a b c,ans就不等于0 37 } 38 } 39 if(!ans) //没有满足的,输出No!!! 40 cout<<"No!!!"; 41 }