| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2333 人关注过本帖, 1 人收藏
标题:题目,绳圈,小弟没思路,
只看楼主 加入收藏
loveClangage
Rank: 8Rank: 8
来 自:广东云浮
等 级:蝙蝠侠
帖 子:326
专家分:891
注 册:2013-8-23
结帖率:100%
收藏(1)
已结贴  问题点数:100 回复次数:28 
题目,绳圈,小弟没思路,
今有 100 根绳子,当然会有 200 个绳头。

    如果任意取绳头两两配对,把所有绳头都打结连接起来。最后会形成若干个绳圈(不考虑是否套在一起)。

    我们的问题是:请计算最后将形成多少个绳圈的概率最大?

    注意:结果是一个整数

用程序解,一点思路都没有,求算法,
2014-03-24 19:07
tlliqi
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:204
帖 子:15453
专家分:65956
注 册:2006-4-27
收藏
得分:0 
没人回复呢
2014-03-24 21:54
tlliqi
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:204
帖 子:15453
专家分:65956
注 册:2006-4-27
收藏
得分:5 
应该是100圈   
2014-03-24 21:56
icanbestrong
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:100
专家分:138
注 册:2013-3-13
收藏
得分:10 
可不可以这样想啊,我自己突发奇想,
假设刚开始用00表示一个绳子,则两个绳子连在一起可表示为010,判断是不是线圈则只要数字符串的1的个数是不是偶数即可,至于模拟绳子的组合,暂时没有什麽太好的手段
2014-03-24 22:22
azzbcc
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:江西财经大学
等 级:贵宾
威 望:81
帖 子:3293
专家分:12919
注 册:2012-11-4
收藏
得分:10 
对第100根绳,有两种情况:

成环   2/(200*199)
不成环 1-2/(200*199)   此时变为 99 根绳子

。。。

这是一个递推式。


[fly]存在即是合理[/fly]
2014-03-25 01:00
韶志
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:斗气大陆
等 级:贵宾
威 望:44
帖 子:2223
专家分:13592
注 册:2013-3-22
收藏
得分:5 
从数学概率角度看   结果会不会是个正态分布...

三十年河东,三十年河西,莫欺少年穷!
2014-03-25 11:49
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:55 
不是正态分布,有点类似指数分布(只是从图像上看起来像,我并不清楚这种分布的正式名称)。

很报歉我的概率学的很皮毛,概率在我的专业是门选修课,我也很少用到相关知识所以掌握的不好。

所以关于这题,我是从动态规划的角度考虑的,总觉得通过公式分析可以构造O(1)的算法。形成3个圈的概率最大,约为0.279。

送上我的代码。其中f[i][j]表示当剩余i根绳子时已形成j个圈的概率。

程序代码:
#include <stdio.h>

#define LEN    100

int main()
{
    double f[LEN + 1][LEN + 1] = {0}, t;
    int i, j;
    f[LEN][0] = 1;
    for(i = LEN; i; i--)
    {
        t = 1.0 / (i * 2 - 1);
        f[i - 1][0] = f[i][0] * (1 - t);
        for(j = 1; j <= LEN - i + 1; j++)
            f[i - 1][j] = f[i][j - 1] * t + f[i][j] * (1 - t);
    }
    
    for(t = i = 0; i <= LEN; i++)
    {
        printf("%e\t", f[0][i]);
        if(f[0][i] > t) t = f[0][i], j = i;
    }
    printf("\n %e %d\n", t, j);
    return 0;
}

重剑无锋,大巧不工
2014-03-25 12:56
loveClangage
Rank: 8Rank: 8
来 自:广东云浮
等 级:蝙蝠侠
帖 子:326
专家分:891
注 册:2013-8-23
收藏
得分:0 
回复 3楼 tlliqi
不可能,这个肯定错啦,

编写的程序,不能改变世界,却可以改变自己...
2014-03-25 17:44
pangshch
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:2
帖 子:443
专家分:1966
注 册:2013-4-9
收藏
得分:10 
百度:  蓝桥  绳圈
找到下面这段代码, C++的, 没有解题说明, 输出是100.  看不明白. 贴上来讨论一下.
 

程序代码:
#include<iostream>
#define N 100
using namespace std;

double dp[N+1][N+1] = {0}; 

int main(){
    dp[1][1] = 1;
    for(int i=2;i<=N;i++){
        dp[i][1] = dp[i-1][1] * (2*i-2)/(2*i-1);
        dp[i][i] = dp[i-1][i-1] / (2*i-1);
    }
   
    for(int i=3;i<=N;i++){
        for(int j=2;j<i;j++){
            dp[i][j] = dp[i-1][j-1]/(2*i-1) + dp[i-1][j] * (2*i-2) / (2*i-1);
        }
    }
   
    int index = 0;
    double maxR = 0;
    for(int i=1;i<=N;i++){
        if(dp[N][i]>maxR){
            index = i;
            maxR = dp[N][i];
        }   
    }
    cout<<index<<endl;
    return 0;
}


2014-03-25 18:02
loveClangage
Rank: 8Rank: 8
来 自:广东云浮
等 级:蝙蝠侠
帖 子:326
专家分:891
注 册:2013-8-23
收藏
得分:0 
回复 9楼 pangshch
我觉得,不是这个,怎么有可能每条绳头都这么巧成环,

编写的程序,不能改变世界,却可以改变自己...
2014-03-25 19:02
快速回复:题目,绳圈,小弟没思路,
数据加载中...
 
   



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

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