洛谷1008
- 题意:
将1,2, 3,...,9共9个数分成3组,分别组成3个三位数,
且使这3个三位数构成1:2:3的比例,
试求出所有满足条件的3个三位数。每行3个数字。按照每行第1个数字升序排列。 - 解题:
记这三个三位数从小到大分别为A,B,C,则最小数A的取值范围为123~333(因为超过333的数,其3倍会超过最大数999)
则接下来可以采用暴力法求解:
最主要思想是1~9这几个数的和为45,乘积为362880,为固定数,可用来判断三个三位数有无重复的数字。 - 代码:
#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; }

浙公网安备 33010602011771号