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

    xiaoxiao2021-12-14  18

    #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); f=sum2; 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); i=sum3; 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有限制

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

    转载请注明原文地址: https://ju.6miu.com/read-969768.html

    最新回复(0)