| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2019 人关注过本帖
标题:一道简单的题,估计是思路有问题
取消只看楼主 加入收藏
mfkblue
Rank: 5Rank: 5
等 级:职业侠客
帖 子:472
专家分:343
注 册:2008-12-21
结帖率:96.25%
收藏
已结贴  问题点数:20 回复次数:10 
一道简单的题,估计是思路有问题
编写一个递归函数,用来输出n个元素的所有子集.例如,三个元素{a,b,c}的所有子集是:
{}(空集),{a},{b},{c},{ab},{ac},{bc},{abc}.
看来看去自己的代码,不是思路有问题,而是很有问题。来请教下个各位大哥咋写.
#include <iostream.h>
#include <stdlib.h>
void sub(char list[],int n)
{
    if(n==0)
    {
        cout<<" ";
        exit(1);
    }
    else
    {
        for(int i=0;i<n;i++)
        {
        cout<<list[i];
        
        }
    }
}


void main()
{
    char list[]="abc";//按题意这里是不定的,我这拿来测试用的.
    sub(list,3);
}
搜索更多相关主题的帖子: 思路 
2009-07-21 23:32
mfkblue
Rank: 5Rank: 5
等 级:职业侠客
帖 子:472
专家分:343
注 册:2008-12-21
收藏
得分:0 
基本上是照书抄的。跟着代码在纸上画了下,第一次输是abc不错,第二次输出时,k=0;i=1, 交换后list="bac" 所以输出时应该也是bac,但实际运行不是的,这题真难懂。
#include <iostream.h>
#include <stdlib.h>
inline swap(char &a,char &b)
{
char t=a;
a=b;
b=t;
}

void sub(char list[],int k,int m)
{
    int i;
    if(k==m)
    {
        for(i=0;i<=m;i++)
            cout<<list[i];
        cout<<endl;
    }
    else
    {
        for(i=k;i<=m;i++)
        {
        swap(list[k],list[i]);
        sub(list,k+1,m);
        swap(list[k],list[i]);
        }
    }
}


void main()
{
    char list[]="abc";
    sub(list,0,3);
}
2009-07-22 16:46
mfkblue
Rank: 5Rank: 5
等 级:职业侠客
帖 子:472
专家分:343
注 册:2008-12-21
收藏
得分:0 
大家都说看完c和c++的基础后要看看数据结构,这就是数据结构的算法应用第一章的题目。
2009-07-22 22:45
mfkblue
Rank: 5Rank: 5
等 级:职业侠客
帖 子:472
专家分:343
注 册:2008-12-21
收藏
得分:0 
如果不是你们俩人夸他,我还在怀疑中,这代码是不是有问题。
而且我还没看懂leeco写的代码。
2009-07-23 21:31
mfkblue
Rank: 5Rank: 5
等 级:职业侠客
帖 子:472
专家分:343
注 册:2008-12-21
收藏
得分:0 
回复 13楼 ET_bug
for(int i=(d?x[d-1]+1:0);i<n;i++) 这句话编译不过去
2009-07-23 22:31
mfkblue
Rank: 5Rank: 5
等 级:职业侠客
帖 子:472
专家分:343
注 册:2008-12-21
收藏
得分:0 
pangding的输出还蛮正常,可不是递归.
if (++index[j] < n) 这句也看不懂
这道题还真不是一道简单题
2009-07-23 22:40
mfkblue
Rank: 5Rank: 5
等 级:职业侠客
帖 子:472
专家分:343
注 册:2008-12-21
收藏
得分:0 
回复 18楼 pangding
for(i=(d?x[d-1]+1:0);i<n;i++) 错误只是重复定义了,去掉int后输出也正常了.这步没看明白什么作用,昨天事多比较忙,连为什么错都没看见, 现再来慢慢研究下.

[[it] 本帖最后由 mfkblue 于 2009-7-24 16:33 编辑 [/it]]
2009-07-24 16:21
mfkblue
Rank: 5Rank: 5
等 级:职业侠客
帖 子:472
专家分:343
注 册:2008-12-21
收藏
得分:0 
leeco的代码从四点多一直用debug一步步看到现在,还是改了下,把 i=(d?x[d-1]+1:0);这句拆了放在for循环的上面,不然每次进for循环时都头晕。基本明白了程序怎么走的,但可以肯定的是,这个距离差太远了,看的心情一步步走底啊。x[]里面的值走的太厉害了。背下他的代码是没问题,想到这个思路就不太可能了
2009-07-24 17:45
mfkblue
Rank: 5Rank: 5
等 级:职业侠客
帖 子:472
专家分:343
注 册:2008-12-21
收藏
得分:0 
回复 19楼 莫云今次
简单的回溯
递归里面还要调用两次,想跟着走一遍都难,调用五次以后就找不清楚返回到哪一步了。
2009-07-24 22:16
mfkblue
Rank: 5Rank: 5
等 级:职业侠客
帖 子:472
专家分:343
注 册:2008-12-21
收藏
得分:0 
回复 26楼 pangding
你说到abc,就是找出bc所以的子集,再加a,就abc所有的子集,这个道理就是我现在看的书上讲的一样了,道理是明白了,写起来就糊涂了.
fib那个里虽然也调用两次,但是因为按照公式写的,倒是很快写出来了。
你写的这道题的代码我还没认真看,今天就看他们那两个人代码去了。结论是跟昨天没看差不多,云山雾绕,稀里糊涂.
我没考虑不用递归的办法,但我估计应该是能写出来的,不太确定
2009-07-24 23:53
快速回复:一道简单的题,估计是思路有问题
数据加载中...
 
   



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

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