1,2,3……,9组成3个三位数abc,def和ghi,每个数字恰好使用一次,要求abc:def:ghi=1:2:3.输出所有解的两种解法

解法1:

#include<iostream>  
#include<cstdio>  
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)  
            printf("%d %d %d\n", i, j, k);  
    }  
    return 0;  
}  

解法2:

#include<iostream>  
#include<cstdio>  
#include<cstring>  
using namespace std;  
  
int main(int argc, const char * argv[])  
{    
    int n, i, j;  
    char a[10];//数组定义比实际大一些   
    for(n = 123; n < 330; n++)  
    {  
        sprintf(a, "%d", n * 1000000 + n * 2 * 1000 + n * 3);//将abcdefghi存入到字符串a中   
        for(j = 0, i = '1'; i <= '9'; memchr(a, i++, 9) && j++);//比较1到9,用j记录。当字符数组a中没有i对应的字符时,根据短路原则,j++不执行,循环过后,j将不等于9   
        if (j == 9)   
        {  
            printf("%d %d %d \n", n, n * 2, n * 3);  
        }  
    }  
return 0;  
}  

猜你喜欢

转载自blog.csdn.net/jirryzhang/article/details/79518504