题目描述
将 1,2,3,4,5,6,7,8,9 共 9 个数分成 3 组,分别组成 3 个三位数,且使这 3 个三位数构成 1:2:3 的比例,试求出所有满足条件的 3 个三位数,按照从小到大输出。(1~9每一位数只出现一次)
比如:192 384 576 就是满足条件的第一组解。
输入
无
输出
若干行,每行 3 个数字。按照从小到大输出每组解。
步骤 / 思路:
1、循环i
,表示第一个三位数,注意从100
循环到333
,因为要*2
和*3
,所以最多就到333
,不然*3
会超。
for(int i=100;i<=333;i++)
2、定义x
和y
,分别表示i*2
和i*3
的值。
x=i*2; y=i*3;
并且将这3个三位数连起来并成一个9位数,好判断每个数是否只出现了一次。
t=i*1000000+x*1000+y;
3、把t
的每一位计上个数。
while(t!=0){
a[t%10]++;
t=t/10;
}
4、判断每个数字是否只出现了一次或没有出现,如果不符合要求,r=false
,直接break
。
for(int j=1;j<=9;j++){
if(a[j]!=1){
r=false;
break;
}
}
5、最后判断,如果r=true
,那么直接输出i
、x
和y
,这三个三位数。
if(r==true){
cout<<i<<" "<<x<<" "<<y<<endl;
}
完整代码:
#include <bits/stdc++.h>
using namespace std;
int x,y,t;
bool r;
int main(){
for(int i=100;i<=333;i++){
x=i*2;
y=i*3;
int a[10]={0};
t=i*1000000+x*1000+y;
while(t!=0){
a[t%10]++;
t=t/10;
}
r=true;
for(int j=1;j<=9;j++){
if(a[j]!=1){
r=false;
break;
}
}
if(r==true){
cout<<i<<" "<<x<<" "<<y<<endl;
}
}
return 0;
}