题目背景
本题为提交答案题,您可以写程序或手算在本机上算出答案后,直接提交答案文本,也可提交答案生成程序。
题目描述
将1,2,⋯ ,9共9个数分成3组,分别组成3个三位数,且使这3个三位数构成1:2:3的比例,试求出所有满足条件的3个三位数。
输入格式
木有输入
输出格式
若干行,每行3个数字。按照每行第1个数字升序排列。
输出数据如下:
如果你知道一个结论,那么这道题就非常简单:如果一个集合中的元素的总和与乘积与另外一个集合中元素的总和与乘积一样,那么这两个集合的元素相等。这是一个充要条件,反过来也成立。
比如,A{1,2,3,4},如果另外一个集合B中所有的元素的总和与乘积与A元素的总和与乘积一样,那么B集合的元素是{1,2,3,4},记住,要总和与乘积同时成立,两个集合才相等。假设只有总和相等,那么如C{1,2,3},D{2,2,2},虽然总和都是6,但是C集合与D集合的元素并不相等。又假设只有乘积成立,如E{1,2,4},F{2,2,2},虽然E集合与F集合中元素的乘积都是8,但元素也不相等。
#include<bits/stdc++.h>
using namespace std;
int main()
{
int a,b,c;
/*
为什么a从123开始?333结束呢?
答:因为a是不同的三位数,那么最小便是123,而要与b,c构成1:2:3的比例
a的最大只能是333,因为当a=333,c此时等于999,<1000
*/
for(int a=123;a<=333;a++)
{
b=a*2;
c=a*3;
if((a%10+a/10%10+a/100+b%10+b/10%10+b/100+c%10+c/10%10+c/100)==(1+2+3+4+5+6+7+8+9)&&((a%10)*(a/10%10)*(a/100)*(b%10)*(b/10%10)*(b/100)*(c%10)*(c/10%10)*(c/100))==(1*2*3*4*5*6*7*8*9))
{
cout<<a<<" "<<b<<" "<<c<<endl;
}
}
return 0;
}