| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 482 人关注过本帖
标题:相连游戏
只看楼主 加入收藏
风雨123
Rank: 2
等 级:论坛游民
帖 子:84
专家分:65
注 册:2013-2-23
结帖率:66.67%
收藏
已结贴  问题点数:5 回复次数:8 
相连游戏
第 201 题    相连游戏
(时间限制为:100毫秒)


问题描述
     这是一个小而古老的游戏,假设你将1~2n个数按顺时针方向写下来组成一个圆环,然后用一些线段将这些数组成一个数对。每个数只仅仅与另一个相连。而且所有线段不能相交。
     请你写一个程序,计算当写下2n个数后,一共有多少种不同的相连方式。
     连接方式数Ai的推导公式如下:
     A1=1    An=(4n-2)/(n+1)*An-1  (n>=2)
输入
    每行输入一个正整数n(1<=n<=100),最后一行是-1,代表结束。
输出
    对于每个n,输出一行数字,表示2n个数相连的可能数目。
样例输入
2
3
-1
样例输出
2
5
程序代码:
#include <iostream>
using namespace std;
int f(int n)
{ unsigned long s;//范围小了,怎么办
    if(n==1)
        s=1;
    else if(n>=2)
    s=(4*n-2)*f(n-1)/(n+1);
      return s;
}
int main()
{
    int x;
   
        while(cin>>x)
        {
        if(x==-1)break;
        cout<<f(x)<<endl;
        }
    return 0;
}

 
搜索更多相关主题的帖子: 正整数 顺时针 游戏 
2013-02-27 14:35
Susake
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:女儿国的隔壁
等 级:贵宾
威 望:23
帖 子:2288
专家分:6481
注 册:2012-12-14
收藏
得分:0 
把s定义为__int64的看看

仰望星空...........不忘初心!
2013-02-27 14:38
Susake
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:女儿国的隔壁
等 级:贵宾
威 望:23
帖 子:2288
专家分:6481
注 册:2012-12-14
收藏
得分:0 
我的可以
图片附件: 游客没有浏览图片的权限,请 登录注册

仰望星空...........不忘初心!
2013-02-27 14:40
风雨123
Rank: 2
等 级:论坛游民
帖 子:84
专家分:65
注 册:2013-2-23
收藏
得分:0 
还是小了
20就超过了。

[ 本帖最后由 风雨123 于 2013-2-27 14:45 编辑 ]
2013-02-27 14:44
azzbcc
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:江西财经大学
等 级:贵宾
威 望:81
帖 子:3293
专家分:12919
注 册:2012-11-4
收藏
得分:0 
那很明显考大数运算的。。。。


[fly]存在即是合理[/fly]
2013-02-27 15:15
风雨123
Rank: 2
等 级:论坛游民
帖 子:84
专家分:65
注 册:2013-2-23
收藏
得分:0 
请求高手,为我解答。谢了。
2013-02-27 20:20
azzbcc
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:江西财经大学
等 级:贵宾
威 望:81
帖 子:3293
专家分:12919
注 册:2012-11-4
收藏
得分:0 
5分。。。

50分如何?


[fly]存在即是合理[/fly]
2013-02-27 20:57
fanpengpeng
Rank: 8Rank: 8
来 自:南极洲
等 级:蝙蝠侠
威 望:7
帖 子:299
专家分:849
注 册:2013-2-1
收藏
得分:5 
没找到这道题在哪儿提交 所以不一定会AC 主要是用了标准库 时间上不保证会通过
因为是大数运算 所以用容器模拟了一个LargeInt类 时间有限 只提供了 *= /= 和 << 三个运算符 正好够本题用
编程效率太低 又要赶着睡觉
原理是用数组模拟多位数乘除过程 这里数组一个元素值0-9999 正好表示大整数中的4个十进制位 4位一组
由于太复杂 所以先只实现了乘数和除数都是“一位”的情形 即乘除的又操作数要小于10000 但对本题来说足够用了
思路是看的百度知道上的 http://zhidao.baidu.com/question/166472785.html
主函数 用了LargeintInt 很简明
程序代码:
int main()
{
    int n;
    LargeInt An;
    while(cin>>n && n >= 1){
        An = 1;
        for(int i(2); i <= n; i++){
            An *= 4*i-2;
            An /= i+1;
        }
        cout << An << endl;
    }
    return 0;
}

类的定义及实现如下
程序代码:
#include <iostream>
#include <vector>

using namespace std;

class LargeInt
{
    public:
        LargeInt(): n(1,0) {}
        LargeInt(int i): n(1,0) {*n.begin() = i;}
        ~LargeInt() {}
        LargeInt& operator*=(int m);
        LargeInt& operator/=(int m);
        friend ostream& operator<<(ostream &out, LargeInt &Ln);
    
    private:
        vector<long> n;
        int carry(long &i){
            int tmp = i<10000 ? 0 : i/10000; 
            if(tmp) i %=10000;
            return tmp;
        }
};

LargeInt& LargeInt::operator*=(int m)
{
    int carryval = 0;
    for(vector<long>::iterator iter=n.begin();
        iter != n.end(); iter++){
            *iter *=m;
            *iter +=carryval;
            carryval = carry(*iter);  
        }
    if(carryval) n.push_back(carryval);
    
    return *this;
}

LargeInt& LargeInt::operator/=(int m)
{
    int rem = 0;
    if(n.end()-n.begin() > 1 && *n.rbegin()    < m){
        *(++n.rbegin()) += (*n.rbegin())*10000;
        n.pop_back();        
    }
    for(vector<long>::reverse_iterator iter=n.rbegin();
        iter != n.rend(); iter++){
        *iter +=rem;
        rem = (*iter%m)*10000;
        *iter /=m;        
    }
    
    return *this;
}

ostream& operator<<(ostream &out, LargeInt &Ln)
{
    for(vector<long>::reverse_iterator iter=Ln.n.rbegin();
        iter != Ln.n.rend(); iter++){
        if(iter != Ln.n.rbegin()){
            out.fill('0');
            out.width(4);    
        }
        out << *iter;        
    }
    
    return out;
}

程序的运行情况:
图片附件: 游客没有浏览图片的权限,请 登录注册

现在刚刚在学C++ 借楼主题目练习练习 欢迎批评

人生是一场错过 愿你别蹉跎
2013-02-28 00:49
风雨123
Rank: 2
等 级:论坛游民
帖 子:84
专家分:65
注 册:2013-2-23
收藏
得分:0 
谢谢了
2013-03-02 19:19
快速回复:相连游戏
数据加载中...
 
   



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

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