《算法竞赛入门经典》Java方法求解——排序

习题2-6 排列(permutation)
用1,2,3,…,9组成3个三位数abc,def和ghi,每个数字恰好使用一次,要 求abc:def:ghi=1:2:3。按照“abc def ghi”的格式输出所有解,每行一个解。提示:不必 太动脑筋。

今天无意间看见了书上的一道习题看了半天发现居然不会写,然后在网上找了许多资料,但是好多方法我看的不是太懂,后来自己静下心想到网上的一段话突然有了灵感,
九个数加起来是45,相乘是362880看似无用,实际上用处很大,我先把范围锁定,abc最小只能是123,最大就是987/3=329;然后每得到一个abc就算出来一个def和ghi;然后再判断是否符合条件,符合的就输出,不符合的就循环下一次的。下面看代码。

import java.util.Scanner;

/** 
* @author 作者 E-mail: WYJ 1627407425@qq.com
* @version 创建时间:2019年5月6日 下午8:29:19 
*  类说明 
*/
public class 排列 {

	public static void main(String[] args) {
		int x1,y1,z1,x2,y2,z2,x3,y3,z3,j,k;
		for(int i=123;i<=329;i++) {
			x1 = i/100;
			y1 = i%100/10;
			z1 = i%100%10;
			j = i*2;
			x2 = j/100;
			y2 = j%100/10;
			z2 = j%100%10;
			k = i*3;
			x3 = k/100;
			y3 = k%100/10;
			z3 = k%100%10;
			if(x1+x2+x3+y1+y2+y3+z1+z2+z3==45&&x1*x2*x3*y1*y2*y3*z1*z2*z3==362880) {
				System.out.println(i+" "+j+" "+k);
			}
		}
		
	}

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值