题目描述:将1,2,…,9共9个数分成三组,分别组成三个三位数,且使这三个三位数构成1:2:3的比例,试求出所有满足条件的三个三位数。
分析:由这9个数构成的三位数最小为123,最大为987。所以遍历范围是123 ~ 987/3 = 329,每次取定最小的数后得到其2倍、3倍,将这三个数的每一位存到数组中,用排序保证每个数字只用一次。
C++代码:
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<iostream>
#include<vector>
#define ll long long
using namespace std;
#define inf 0x3f3f3f3f
int main()
{
int i,j,a[15];
bool ans;
for (i=123;i<=329;i++)
{
a[1]=i%10;
a[2]=i%100/10;
a[3]=i/100;
a[4]=2*i%10;
a[5]=2*i%100/10;
a[6]=2*i/100;
a[7]=3*i%10;
a[8]=3*i%100/10;
a[9]=3*i/100;
sort(a+1,a+10);
ans=true;
for (j=1;j<=9;j++)
if (a[j]!=j) //说明前面有数字出现次数 > 1
ans=false;
if (ans) cout<<i<<" "<<i*2<<" "<<i*3<<endl;
}
return 0;
}