作业帮 > 综合 > 作业

用1,2,3……,9组成3个三位数abc,def和ghi,每个数字恰好使用一次,要求abc:def:ghi=1:2:3.

来源:学生作业帮 编辑:灵鹊做题网作业帮 分类:综合作业 时间:2024/04/29 22:13:47
用1,2,3……,9组成3个三位数abc,def和ghi,每个数字恰好使用一次,要求abc:def:ghi=1:2:3.输出所有解.
#include
#include
int main()
{
int a,b,c,d,e,f,g,h,i;
for(a=1;a
用1,2,3……,9组成3个三位数abc,def和ghi,每个数字恰好使用一次,要求abc:def:ghi=1:2:3.
这道题以前做过,有点印象

  其实这道题就2个地方要注意,也是解题关键

abc:def:ghi=1:2:3
1,2,3……,9组成3个三位数abc,def和ghi,每个数字恰好使用一次

对于第一个地方,我们可以用1个循环,加3个变量来实现
就是
for(i = 123; i <= 329; i++)
{
    j = i * 2;    //i的2倍
    k = i * 3;    //i的3倍
}
i 最小只能是123,最大只能是329(因为最大数字只能是987)

第2个地方的实现,我们可以用数学的方法来实现
9加起来真能是45,9乘起来只能是362880

所以我们可以将前面的i,j,k分别分解出来的9位数字相加,相乘, 
看最后的结果是不是45,362880

具体代码
//用1,2,3……,9组成3个三位数abc,def和ghi,每个数字恰好使用一次,要求abc:def:ghi=1:2:3.输出所有解.

#include <stdio.h>

void result(int num, int &result_add, int &result_mul)
{
    int i, j, k;

    i = num / 100;        //百位
    j = num / 10 % 10;    //十位
    k = num % 10;         //个位

    result_add += i + j + k;    //分解出来的位数相加
    result_mul *= i * j * k;    //相乘
}

int main()
{
    int i, j, k;
    int result_add, result_mul;

    for(i = 123; i <=329; i++)
    {
        j = i * 2;
        k = i * 3;

        result_add = 0;
        result_mul = 1;

        result(i, result_add, result_mul);
        result(j, result_add, result_mul);
        result(k, result_add, result_mul);

        if(result_add == 45 && result_mul == 362880)
            printf("%d %d %d\n", i, j, k);
    }
    return 0;
}

效果:


PS:若有不明白的地方,
再问: 大神可以帮我看下我的程序哪里出错了吗,谢谢!