| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2818 人关注过本帖, 1 人收藏
标题:输入一字母系列如:A B C D E,从中任意选两个字母用括号将它们括起来。
只看楼主 加入收藏
heartnheart
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
帖 子:335
专家分:1096
注 册:2009-7-10
收藏
得分:15 
感觉像深搜……
程序代码:
#include <iostream>
#include <cstring>
#include <algorithm>
#include <cstdio>
#include <cstdlib>
using namespace std;
string str;
int len;
int cnt;
void DFS(int start ,int end,int deep,string & result) {
    if(deep == len - 1) {
        cout << result << endl;
        cnt++;
        return ;
    }
    if(start > 0) {
        string temp = result;
        result.insert(0,str.substr(start-1,1));
        result.insert(0,"(");
        result.append(")");
        DFS(start - 1,end,deep+1,result);
        result = temp;
    }

    if(end < len - 1) {
        string temp = result;
        result.insert(result.length(),str.substr(end+1,1));
        result.insert(0,"(");
        result.append(")");
        DFS(start,end+1,deep+1,result);
        result = temp;
    }
}

int main() {
    cin >> str;
    len = str.length();

    for(int i = 0; i < len-1; i++){
            string t = str.substr(i,2);
            t.insert(0,"(");
            t.append(")");
            DFS(i,i+1,1,t);
    }
    cout << "cnt = " << cnt ;
    return 0;
}

2010-08-22 13:48
守候
该用户已被删除
收藏
得分:0 
回复 11楼 heartnheart
提示: 作者被禁止或删除 内容自动屏蔽
2010-08-22 13:54
heartnheart
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
帖 子:335
专家分:1096
注 册:2009-7-10
收藏
得分:0 
回复 12楼 守候
全局变量默认是0
2010-08-22 15:21
okayyyy
Rank: 2
等 级:论坛游民
威 望:2
帖 子:102
专家分:70
注 册:2010-6-15
收藏
得分:0 
    就拿4个字符的集合来说明
 看看提示
((( 1 2 )3 )4))--------1234分别代表一个框
第一个框能放的元素方法有4种
第二个框能放的元素方法有3
第三个框能放的元素方法有2
第四个框能放的元素方法有1

字母排列总数=4!
还的考虑括号的排列。
这种计数问题非常适合递归。可惜 我现在不会

[ 本帖最后由 okayyyy 于 2010-8-22 22:02 编辑 ]
2010-08-22 21:46
御坂美琴
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:魔術の禁書目錄
等 级:小飞侠
威 望:9
帖 子:952
专家分:2929
注 册:2010-8-18
收藏
得分:0 
以下是引用okayyyy在2010-8-22 21:46:21的发言:

    就拿4个字符的集合来说明
 看看提示
((( 1 2 )3 )4))--------1234分别代表一个框
第一个框能放的元素方法有4种
第二个框能放的元素方法有3
第三个框能放的元素方法有2
第四个框能放的元素方法有1

字母排列总数=4!
还的考虑括号的组合,算了不想了,忘的差不多了 还的复习

这种计数问题非常适合递归。可惜 我现在不会
不是的,楼主的题目有规定下一个括号只能有两种选择,你看看题目吧,御坂提醒道

永远为正义而奋斗,锄强扶弱的Level 5 超能力者
とある魔術の禁書目錄インデックス__御み坂さか美み琴こと
http://bbs.bccn.net/space.php?action=threads&uid=483997
2010-08-22 22:02
okayyyy
Rank: 2
等 级:论坛游民
威 望:2
帖 子:102
专家分:70
注 册:2010-6-15
收藏
得分:0 
那就简单了,只要考虑第一对括号能出现的位置。
拿上面的问题来说就只有3中组合

所以总数=4!*3
现在是绝对没问题了

楼上的,你的粉丝很多啊,不管马腿,马屁一通乱拍。

[ 本帖最后由 okayyyy 于 2010-8-22 22:21 编辑 ]
2010-08-22 22:08
succubus
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:4
帖 子:635
专家分:1080
注 册:2007-10-7
收藏
得分:0 
something else

[ 本帖最后由 succubus 于 2010-8-26 23:42 编辑 ]

[url=http:///view/aDU1]/image/aDU1.gif" border="0" />[/url]
2010-08-22 22:19
okayyyy
Rank: 2
等 级:论坛游民
威 望:2
帖 子:102
专家分:70
注 册:2010-6-15
收藏
得分:0 
又算了算 每个字符序列 分别得考虑括号组合,  这个总数还真是大。
别说什么归纳法了,排列组合都记不清楚了

再算了算,每个序列的括号排列又有1 + 3 + 3 + 1
计算排列的总数,n!                 
再计算每个排列的括号排列2^(n-2)  
得n!* 2^(n-2)
                                             
我不信我的解题方法有问题。思路是一点问题都没

我倒想问问2^(n-2)的结果到底是怎么得来的
由2^(n-2)可知,n=3是:只有2种组合,呵呵 你去排排看。只有2种吗?
((a b) c) (a (b c))
别说浮躁   a b c a c b  b a c    b c a  c a b  c b a 那我问这这个没排的怎么办?你帮我用归纳法证明下

[ 本帖最后由 okayyyy 于 2010-8-23 01:54 编辑 ]
2010-08-22 22:37
okayyyy
Rank: 2
等 级:论坛游民
威 望:2
帖 子:102
专家分:70
注 册:2010-6-15
收藏
得分:0 
我忏悔阿门 保佑我
2010-08-25 06:22
succubus
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:4
帖 子:635
专家分:1080
注 册:2007-10-7
收藏
得分:0 
nothing


[ 本帖最后由 succubus 于 2010-8-26 23:41 编辑 ]

[url=http:///view/aDU1]/image/aDU1.gif" border="0" />[/url]
2010-08-25 09:09
快速回复:输入一字母系列如:A B C D E,从中任意选两个字母用括号将它们括起来 ...
数据加载中...
 
   



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

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