用队列实现分行打印(a+b)的n次方展开式系数

1. 问题描述:用队列实现分行打印(a+b)的n次方展开式系数

2. Java代码:

package boke.queue;

/**
 * 分行打印(a+b)的n次方的系数
 * 
 * @since jdk1.6
 * @author 毛正吉
 * @version 1.0
 * @date 2010.05.25
 * 
 */
public class AAddBNPrint {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
                // 测试例子
		AAddBNPrint aaBNP = new AAddBNPrint();
		int n = 10;
		aaBNP.print(n);
	}

	private MyQueue mq = new MyQueue(); //FIFO队列
	
	/**
	 * 打印出(a+b)的n次方的展开式的系数
	 * @param n
	 */
	public void print(int n) {
		mq.makeEmpty();
		mq.enQueue(new Integer(1)); // 预先放入第一行的两个系数
		mq.enQueue(new Integer(1));

		int s = 0; // 计算下一行系数时用到的工作单元
		for (int i = 1; i <= n; i++) { // 逐行处理
			System.out.println(""); // 换一行
			mq.enQueue(new Integer(0)); // 各行间插入一个0
			for (int j = 1; j <= i + 2; j++) { // 处理第i行的i+2个系数(包括一个0)
				int t = (Integer) mq.deQueue(); // 读取一个系数
				mq.enQueue(new Integer(s + t)); // 计算下一行系数,并进队列
				s = t;
				if (j != i + 2) { // 打印一个系数, 第i+2个是0
					System.out.print(s + " ");
				}

			}
		}

	}

}

-------------------------------------------------------
package boke.queue;

import java.util.LinkedList;

/**
 * 队列
 * 
 * @since jdk1.6
 * @author 毛正吉
 * @version 1.0
 * @date 2010.05.25
 * 
 */
public class MyQueue {
	private LinkedList ll = new LinkedList();

	/**
	 * 入队
	 * 
	 * @param o
	 */
	public void enQueue(Object o) {
		ll.addLast(o);
	}

	/**
	 * 出队
	 * 
	 * @return
	 */
	public Object deQueue() {
		return ll.removeFirst();
	}

	/**
	 * 队列是否为空
	 * 
	 * @return
	 */
	public boolean isEmpty() {
		return ll.isEmpty();
	}

	/**
	 * 队列置空
	 */
	public void makeEmpty() {
		ll.clear();
	}
}
3. 输出结果:

1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
1 6 15 20 15 6 1
1 7 21 35 35 21 7 1
1 8 28 56 70 56 28 8 1
1 9 36 84 126 126 84 36 9 1
1 10 45 120 210 252 210 120 45 10 1

你可能感兴趣的:(工作,单元测试,J#)