用队列实现分行打印(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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值