三连击

题目背景

本题为提交答案题,您可以写程序或手算在本机上算出答案后,直接提交答案文本,也可提交答案生成程序。

题目描述

将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;
}

代码中要注意的地方就是if判断条件里面的内容,注意一下符号运算的优先级

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值