排列(超级麻烦)+改进简单版

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main()
{
    //freopen("in.txt","r",stdin);
    // freopen("out.txt","w",stdout);
    int a,b,c;
    for(a=1; a<=3; a++)
    {
        for(b=1; b<=9; b++)
        {
            if(b!=a)
            {
                for(c=1; c<=9; c++)
                {
                    if(c!=a&&c!=b)
                    {
                        int sum1=a*100+b*10+c;
                        int sum2=2*sum1;
                        int sum3=3*sum1;
                        if(sum2<=698&&sum3<=987)

                        {
                            int d,e,f,g,h,i;
                            d=sum2/100;
                            e=(sum2/10)%10;
                            f=sum2%10;
                            if(d!=e&&e!=f&&f!=d&&e!=0&&f!=0)

                            {

                                if(d!=a&&d!=b&&d!=c&&e!=a&&e!=b&&e!=c&&f!=a&&f!=b&&f!=c)
                                {
                                    g=sum3/100;
                                    h=(sum3/10)%10;
                                    i=sum3%10;
                                    if(g!=h&&g!=i&&i!=h&&h!=0&&i!=0&&g!=d&&g!=e&&d!=f&&h!=d&&h!=e&&h!=f&&i!=d&&i!=e&&i!=f)
                                    {if(g!=a&&g!=b&&g!=c&&h!=a&&h!=b&&h!=c&&i!=a&&i!=b&&i!=c)
                                        printf("%d %d %d\n",sum1,sum2,sum3);
                                    }
                                }
                            }
                        }
                    }
                }
            }

        }

    }
    return 0;
}

输出为:
192 384 576
219 438 657
273 546 819
327 654 981

Process returned 0 (0x0) execution time : 0.293 s
Press any key to continue.

肯定还有更好的办法

更新:

#include <iostream>

using namespace std;

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)
            cout<<i<<' '<<j<<' '<<k<<' '<<endl;
    }
    return 0;
}

换用c++, 用引用来改变实参

注意1到9相加一定为45 1到9相乘也一定为定值

最大数为987 除以3后 为329 所以sum1有限制

可以从直接从三位数开始找 只要满足和和积符合 这样就不用判断重复问题
就说明没有重复
比较方便!!!不用自己加

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值