| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 860 人关注过本帖
标题:又来求教了,这次是一个图形的算法问题!题目如下
只看楼主 加入收藏
灵夕920329
Rank: 1
等 级:新手上路
帖 子:12
专家分:2
注 册:2012-12-2
结帖率:50%
收藏
已结贴  问题点数:20 回复次数:3 
又来求教了,这次是一个图形的算法问题!题目如下
問題描述:
有下面一個這樣的圖形,我們從原點 (0,0) 出發,每次移動只能往上、往右、往右上三種方向其中一種前進。我們可以人工的方式算出走到 (1,1) 有 2 種走法、 (2,2) 有 6 種走法。
現在要你寫一個程式,計算從 (0,0) 走到 (n,n),(1 <= n <= 15) ,共有幾種走法。

輸入說明:
第一行為一個正整數 m 表示共有 m 組測試資料,其後有 m 行,每行有一個介於 1 到 15 之間的正整數 。

輸出說明:
每組測試資料結果 輸出於一行 。

图形是:(好像不能贴图吧?压缩了再上传的,麻烦大神看看!)
图形.zip (71.84 KB)


範例:

Sample Input:          Sample Output:
 
2                         2

1                         6

2
 



 
 
搜索更多相关主题的帖子: 图形 
2012-12-09 17:44
w527705090
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:11
帖 子:441
专家分:1882
注 册:2011-6-28
收藏
得分:7 
算法才是编程的精华之所在啊。。。
不懂之好帮顶了

有心者,千方百计;无心者,千难万难。
2012-12-09 18:14
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9007
专家分:53942
注 册:2011-1-18
收藏
得分:7 
真变态呀,一张图片不直接贴出来,却先贴到M$ office中,真是脱裤子放屁,你自己不觉得麻烦,看得人也会觉得麻烦呀

“只能往上、往右、往右上”
--- 可以得出,到(a,b)的走法数 = 到(a-1,b)的走法数 + 到(a-1,b-1)的走法数 + 到(a,b-1)的走法数
因此,递归算法就是
程序代码:
unsigned f( int a, int b )
{
    if( a <  b )
        return 0;

    if( b == 0 )
        return 1;

    return f(a-1,b) + f(a-1,b-1) + f(a,b-1);
}

#include <iostream>

int main()
{
    std::cout << f(2,2) << std::endl;

    return 0;
}
多么简单呀

但一般而言,只有SB才用递归算法(只是一般而言,不代表全部),因此将递归算法反过来,一层层的累加
程序代码:
typedef unsigned int U32T;
U32T f( unsigned n )
{
    U32T* p_ = new U32T[n+2];
    p_[0] = 0;
    U32T* p = p_ + 1;
    for( U32T i=0; i<n+1; ++i )
        p[i] = 1;

    for( U32T i=1; i<=n; ++i )
    {
        for( U32T j=0; j<=n-i; ++j )
        {
            p[j] = p[j-1] + p[j] + p[j+1];
        }
    }

    U32T r = p[0];
    delete[] p_;
    return r;
}

#include <iostream>

int main()
{
    for( unsigned i=1; i<=15; ++i )
        std::cout << i << " = " << f(i) << std::endl;

    return 0;
}
输出为
1 = 2
2 = 6
3 = 22
4 = 90
5 = 394
6 = 1806
7 = 8558
8 = 41586
9 = 206098
10 = 1037718
11 = 5293446
12 = 27297738
13 = 142078746
14 = 745387038
15 = 3937603038
2012-12-10 09:23
mmmmmmmmmmmm
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:8
帖 子:388
专家分:1809
注 册:2012-11-2
收藏
得分:7 
顶版主 学习一下

我们的目标只有一个:消灭0回复!
while(1)
++money;
2012-12-10 09:31
快速回复:又来求教了,这次是一个图形的算法问题!题目如下
数据加载中...
 
   



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

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