当前位置: 代码迷 >> Java相关 >> 求java逻辑运算例题
  详细解决方案

求java逻辑运算例题

热度:322   发布时间:2011-04-05 16:35:05.0
求java逻辑运算例题
有关java计算的例题,如杨辉三角,初高中时的奥术题,急用,希望能有详细解答,谢谢!
搜索更多相关的解决方案: 杨辉三角  java  

----------------解决方案--------------------------------------------------------
杨辉三角:
【来源:互联网】
public class Yanghui {

    public static void main(String[] args) {
        Yanghui yang = new Yanghui();
        yang.printYanghuiTriangle(13);
    }

    /**
     * 生成指定行数的杨辉三角形
     *
     * @param lines 杨辉三角形的行数
     */
    public void printYanghuiTriangle(int lines) {
        if(lines < 1) {
            throw new IllegalArgumentException("lines must be great than 0.");
        }
        if(lines > 30) {
            throw new IllegalArgumentException("lines is too big.");
        }
        int[] line = new int[lines];
        int maxLen = getMaxLen(lines);
        for(int i = 0; i < lines; i++) {
            line[0] = line[i] = 1;
            for(int j = 1, k = i / 2, pre = line[0]; j <= k; j++) {
                int cur = line[j];
                line[i - j] = line[j] += pre;
                pre = cur;
            }
            printLine(line, i + 1, maxLen);
        }
    }

    /**
     * 根据指定行数的杨辉三角形,计算其中最大数字的长度
     * @param lines 杨辉三角形的行数
     * @return      最大数字的长度
     */
    private int getMaxLen(int lines) {
        int k = lines / 2;
        long maxNum = factorial(k + 1, lines - 1) / factorial(1, lines - 1 - k);
        return getLength(maxNum);
    }

    /**
     * 阶乘计算
     * @param start 阶乘计算的起始数字
     * @param num   阶乘计算的终止数字
     * @return      阶乘计算结果
     */
    private long factorial(int start, int num) {
        long result = start > 0 ? start : 1L;
        while(num > start) {
            result *= num--;
        }
        return result;
    }

    /**
     * 根据指定数字计算数字的长度
     * @param num   数字
     * @return      数字的长度
     */
    private int getLength(long num) {
        int len = 0;
        while(num > 0L) {
            num /= 10L;
            len++;
        }
        return len;
    }

    private void printLine(int[] yanghui, int line, int width) {
        printSpaces((yanghui.length - line) * width);

        for(int i = 0; i < line; i++) {
            if(i > 0) {
                printSpaces(width);
            }
            printSpaces(width - getLength(yanghui[i]));
            System.out.print(yanghui[i]);
        }
        System.out.println();
        if(width > 1) {
            System.out.println();
        }
    }

    private void printSpaces(int spaceCount) {
        for(int i = 0; i < spaceCount; i++) {
            System.out.print(" ");
        }
    }
}


----------------解决方案--------------------------------------------------------
还有没,急用啊。。。。
----------------解决方案--------------------------------------------------------
汉诺塔::
【在网上给你找的】呵呵
#35;include <iostream>
using namespace std;
//盘子的最大数量
const int MAXNUM = 10;
//准备三个位置
int a[MAXNUM],b[MAXNUM],c[MAXNUM];
//声明三个函数,注意其中的重载
void disp( int [] );//显示一个位置上的盘子
void disp( );//显示所有三个位置上的盘子
void hano( int, int[], int[], int[] ); //移动汉诺塔
//主函数
int main()
{
    int num;
    cout << "please input the number of towers:";
    cin >> num;//输入盘子个数
    if( num>MAXNUM )
        return 0;
    //在第一个位置放上这些盘子
    for( int i=1; i<=num; i++ )
    a[i] = num+1-i;
    //每个位置的0号元素用来保存这个位置的盘子个数
    a[0] = num;//开始的时候所有盘子都放在第一个位置
    b[0] = 0;//另外两个位置的盘子个数都为0
    c[0] = 0;
    disp();//显示一下初始状态
    hano( num, a, b, c );//移动汉诺塔
    return 0;
}
/*
* 显示一个位置上的全部盘子
* 没有返回值
* 参数表:
* v-表示要显示的位置(数组)
*/
void disp( int v[] )
{
    cout << "{ ";//首尾用花括号分隔
    for( int i=1; i<=v[0]; i++ )//输出每个盘子
    cout << v[i] << " ";
    cout << "} ";
}
/*
* 输出所有三个位置上的盘子
*/
void disp( )
{
    disp( a );
    disp( b );
    disp( c );
    cout << endl;//换行
}
/*
* 移动汉诺塔,使用了递归技术
* 把n个盘子从src位置移动到dst位置,以tmp位置作中转
* 没有返回值
* 参数表:
* n-要移动的盘子个数
* src-要移动的盘子的位置
* dst-盘子要移动到的目标位置
* tmp-中转位置
*/
void hano( int n, int src[], int dst[], int tmp[] )
{
    if( n<=0 )//盘子的个数无效
        return;
    //把上面n-1个先移动到中转位置
    hano( n-1, src, tmp, dst );
    //最后一个盘子,直接移动
    dst[++dst[0]] = src[src[0]--];
    disp();//显示移动后的状态
    //把刚才移动到中转位置那n-1个移动到目标位置
    hano( n-1, tmp, dst, src );
}
----------------解决方案--------------------------------------------------------
  相关解决方案