| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 712 人关注过本帖
标题:求java逻辑运算例题
只看楼主 加入收藏
知之为知之”
Rank: 2
来 自:四川
等 级:论坛游民
帖 子:35
专家分:22
注 册:2011-4-5
结帖率:75%
收藏
已结贴  问题点数:20 回复次数:4 
求java逻辑运算例题
有关java计算的例题,如杨辉三角,初高中时的奥术题,急用,希望能有详细解答,谢谢!
搜索更多相关主题的帖子: 杨辉三角 java 
2011-04-05 16:35
飒沓
Rank: 1
来 自:安徽
等 级:新手上路
帖 子:10
专家分:7
注 册:2011-3-27
收藏
得分:7 
杨辉三角:
【来源:互联网】
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(" ");
        }
    }
}


沾衣欲湿杏花雨
吹面不寒杨柳风
2011-04-05 16:51
知之为知之”
Rank: 2
来 自:四川
等 级:论坛游民
帖 子:35
专家分:22
注 册:2011-4-5
收藏
得分:0 
还有没,急用啊。。。。

风也清,晚空中我问句星  
夜阑静,问有谁共鸣!
2011-04-05 18:36
相望あ江湖
Rank: 2
等 级:论坛游民
帖 子:11
专家分:25
注 册:2011-4-6
收藏
得分:7 
汉诺塔::
【在网上给你找的】呵呵
#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 );
}
2011-04-07 10:41
付政委
该用户已被删除
收藏
得分:7 
提示: 作者被禁止或删除 内容自动屏蔽
2011-04-07 13:09
快速回复:求java逻辑运算例题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.022267 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved