洛谷1008

  1. 题意:

    将1,2, 3,...,9共9个数分成3组,分别组成3个三位数,
    且使这3个三位数构成1:2:3的比例,
    试求出所有满足条件的3个三位数。每行3个数字。按照每行第1个数字升序排列。

  2. 解题:
    记这三个三位数从小到大分别为A,B,C,则最小数A的取值范围为123~333(因为超过333的数,其3倍会超过最大数999)
    则接下来可以采用暴力法求解:
    最主要思想是1~9这几个数的和为45,乘积为362880,为固定数,可用来判断三个三位数有无重复的数字。
  3. 代码:
    #include<iostream>
    #include<stdio.h>
    #include<string.h>
    using namespace std;
    //暴力求解
    int main()
    {
        int a[3], b[3], c[3];
        for (int i = 123; i < 333; i++)
        {
            a[2] = i % 100 % 10;//第一个数的个位
            a[1] = i % 100 / 10;//第一个数的十位
            a[0] = i / 100;//第一个数的百位
            b[2] = 2 * i % 10 % 10;//第二个数的个位
            b[1] = 2 * i % 100 / 10;//第二个数的十位
            b[0] = 2 * i / 100;//第二个数的百位
            c[2] = 3 * i % 10 % 10;//第三个数的个位
            c[1] = 3 * i % 100 / 10;//第三个数的十位
            c[0] = 3 * i / 100;//第三个数的百位
            if ((a[0] * a[1] * a[2] * b[0] * b[1] * b[2] * c[0] * c[1] * c[2] == 362880) && (a[0] + a[1] + a[2] + b[0] + b[1] + b[2] + c[0] + c[1] + c[2] == 45))
            {
                cout << i <<' '<< i * 2<<' ' << i * 3<<endl;
            }
        }
        
        return 0;
    }

     

posted @ 2020-12-17 09:31  Quella'  阅读(128)  评论(1)    收藏  举报
Live2D