`
yiding_he
  • 浏览: 448220 次
  • 性别: Icon_minigender_1
  • 来自: 湖南
社区版块
存档分类
最新评论

查询所有 5 个正整数凑成 100 的搭配

阅读更多
java 代码
 
  1. /**  
  2.  * 查询所有 5 个正整数凑成 100 的搭配。所有数字互不相同。  
  3.  *  
  4.  * @param args 参数  
  5.  */  
  6. public static void main(String[] args) {   
  7.     long start = System.currentTimeMillis();   
  8.     int counter = 0;   
  9.     int result = 0;   
  10.     for (int i = 1; i < 50; i++) {   
  11.         for (int j = i + 1; i + j <= 100; j++) {   
  12.             for (int k = j + 1; i + j + k <= 100; k++) {   
  13.                 for (int l = k + 1; i + j + k + l + l + 1 <= 100; l++) {   
  14.                     int m = 100 - i - j - k - l;   
  15.                     System.out.println(i + " " + j + " " + k + " " + l + " " + m);   
  16.                     counter++;   
  17.                 }   
  18.             }   
  19.         }   
  20.     }   
  21.     long end = System.currentTimeMillis();   
  22.     System.out.println("得到" + counter + "个结果; 花费时间:" + (end - start) + "毫秒; 循环次数:" + counter);   
  23. }   

输出:

 
  1. 1 2 3 4 90  
  2. 1 2 3 5 89  
  3. 1 2 3 6 88  
  4. 1 2 3 7 87  
  5. ......   
  6. 17 18 20 21 24  
  7. 17 18 20 22 23  
  8. 17 19 20 21 23  
  9. 18 19 20 21 22  
  10. 得到25337个结果; 花费时间:656毫秒; 循环次数:25337  
分享到:
评论
1 楼 borland 2007-09-05  

package com.perki;

public class Plus {

	/**
	 * @param args
	 */

	private int count;

	private int sum;

	private int total;

	private int[] arrValue;

	// 0 repeat disable,1: repeat enable
	private int digitalRepeat = 0;

	private static RWFile writer = new RWFile("c:/plus_result.txt",
			RWFile.WRITE);

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int sum = 200;
		int count = 13;
		new Plus(count, sum).calc();
		// writer.flush();
		// writer.close();
	}

	public Plus(int count, int sum) {
		super();
		// TODO Auto-generated constructor stub
		this.count = count;
		this.sum = sum;
		arrValue = new int[count + 1];
	}

	public void calc() {
		long t = System.currentTimeMillis();
		calc(0, sum);
		writer.flush();
		System.out.println("total:" + total + ",cost "
				+ (System.currentTimeMillis() - t) + " ms");
	}

	// public void calc(int start, int leftSum) {
	// int base = 1, max;
	// if (start > 0)
	// base = arrValue[start - 1];
	// max = leftSum / (count - start);
	// if (base > max)
	// return;
	// if (start == count - 1) {
	// arrValue[start] = leftSum;
	// total++;
	// pResult();
	// return;
	// }
	// for (int i = base + (digitalRepeat == 1 ? 0 : 1); i <= max; i++) {
	// arrValue[start] = i;
	// calc(start + 1, leftSum - i);
	// }
	// }
	public void calc(int start, int leftSum) {

		int base = 0, max;
		if (start > 0)
			base = arrValue[start - 1];
		max = leftSum / (count - start);
		if (base >= max + digitalRepeat)
			return;
		if (start == count - 1) {
			//if (leftSum > 150)
			//	return;
			arrValue[start] = leftSum;
			total++;
			pResult();
			return;
		}
		for (int i = base + (digitalRepeat == 1 ? 0 : 1); i <= max; i++) {
			arrValue[start] = i;
			calc(start + 1, leftSum - i);
		}
	}

	public void pResult() {
		String result = "";
		for (int i = 0; i < count; i++) {
			if (i == count - 1)
				result += arrValue[i] + "=";
			else
				result += arrValue[i] + "+";
		}
		result += sum;
		write(result);
	}

	public static void write(String s) {
		//writer.write(s);
		// System.out.println(s);
	}

}

相关推荐

Global site tag (gtag.js) - Google Analytics