[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;
}
  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值