java实现简单算法(三)

问题描述:将1,2,3,4,5,6,7,8,9共9个数分成三组,组成3个三位数,且使这3个三位数构成1:2:3的比例,例如:3个三位数192,384,576满足以上条件.192:384:576=1:2:3。试求出所有满足条件的3个三位数。

解题思路:最小三位数为123,最大三位数为987,则987/3=329,所以枚举范围123~329。网上有网友提出新思路,本人觉得非常好。其思路为其实要判断这三个数是否由1~9组成且各个数组不相同,即这三个数的各位数是否覆盖了1~9,只要判断各位数字的积是否等于9!且各位数字的和是否等于45。较以往的方法有很大的进步性,本人采用java讲该位网友的新方法写了一遍,欢迎建议和意见。具体代码如下。

/**
*
* 作者:RobotHaptic
* 日期:2015.08.14
* 功能:将1,2,3,4,5,6,7,8,9共9个数分成三组,
* 组成3个三位数,且使这3个三位数构成1:2:3的比例,
* 例如:3个三位数192,384,576满足以上条件.
* 192:384:576=1:2:3。试求出所有满足条件的3个三位数
*
*/

public class OneTwoThree {

//构造函数
public OneTwoThree(){

}

//求num上每位上数的和
public int getSum(int num){

    int singleDigit = num % 10;
    int tensDigit = num / 10 % 10;
    int hundredDigit = num /100;
    int sum = singleDigit + tensDigit + hundredDigit;
    return sum;
}

//求num每位上的数的积
public int getMul(int num){

    int singleDigit = num % 10;
    int tensDigit = num / 10 % 10;
    int hundredDigit = num /100;
    int sum = singleDigit * tensDigit * hundredDigit;
    return sum;
}

//是否满足要求
//网上有网友提出方法,只要判断各位数字的积是否等于9!且各位数字的和是否等于45。

public boolean isRight(int num1){
    if ((getSum(num1) + getSum(num1 * 2) + getSum(num1 * 3) == 45) && 
            getMul(num1)*getMul(num1 * 2)*getMul(num1 * 3) == 9*8*7*6*5*4*3*2) {
        return true;
    }
    return false;
}

public static void main(String[] args) {
    // TODO Auto-generated method stub
    OneTwoThree ott = new OneTwoThree();

    /*
     * 1~9组成的最小三位数是123,最大的是987,由于要满足1:2:3的关系,
    最小的那个数应该不到于987/3=329。这样的话第一个数的变化范围是123~329
    */
    for (int i = 123; i < 329; i++) {
        if(ott.isRight(i)){
            //把每个满足要求的数打印出来
            System.out.println(i + " " + (2*i) + " " + (3*i));
        }
    }
}

}

控制台输出如下:
192 384 576
219 438 657
273 546 819
327 654 981

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值