[ACM] 用1,2,3……,9組成3個三位數abc,def和ghi,每個數字恰好使用一次,要求abc:def:ghi=1:2:3.輸出所有解。




方法一

//用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;
}




方法二

#include <stdio.h>
#include <string.h>


int main(int argc, const char * argv[])
{  
    //用1,2,3...9組成3個三位數abc, def, ghi, 每個數字恰好使用一次,且abc:def:ghi=1:2:3,輸出所有解。
    int n, i, j;
    char a[10];
    for(n = 123; n < 330; n++){
        sprintf(a, "%d", n * 1000000 + n * 2 * 1000 + n * 3);
        
        for(j = 0, i = '1'; i <= '9'; memchr(a, i++, 9) && j++);
        
        if (j == 9) {
            printf("%d %d %d \n", n, n * 2, n * 3);
        }
    }
return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章