P1008 三连击

题目描述:将1,2,…,9共9个数分成三组,分别组成三个三位数,且使这三个三位数构成1:2:3的比例,试求出所有满足条件的三个三位数。
分析:由这9个数构成的三位数最小为123,最大为987。所以遍历范围是123 ~ 987/3 = 329,每次取定最小的数后得到其2倍、3倍,将这三个数的每一位存到数组中,用排序保证每个数字只用一次。
C++代码:

#include
#include
#include
#include
#include
#include
#include
#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<

你可能感兴趣的:(P1008 三连击)