| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 548 人关注过本帖
标题:一个c++程序,望高手指点下
只看楼主 加入收藏
morose2004
Rank: 1
等 级:新手上路
帖 子:17
专家分:0
注 册:2011-5-11
结帖率:66.67%
收藏
已结贴  问题点数:20 回复次数:7 
一个c++程序,望高手指点下
程序看不明白,尤其是zuhe函数,望高手给注解下

#include <iostream>
#include <vector>
using namespace std;

int iarray[8] = {1, 2, 3, 4, 5, 6, 7, 8};
vector<vector<int> > vvec; //存放组合结果
int existFlag[8] = {0};

void   zuhe(int m)
{
if(m>8)
{
   return;
}

int count = 0;
for(int i=0; i<8; ++i)
{
   count = count + existFlag[i];
}
if( count < 5)
{
   for(int i=1; i>=0; --i)
   {
    existFlag[m] = i;
    zuhe(m+1);
   }
}
else
{
   vector<int> ivec;
   for(int i=0; i<8; ++i)
   {
    if( existFlag[i] == 1 )
    {
     ivec.push_back(iarray[i]);
    }
   }
   vvec.push_back(ivec);
}
}

int main()
{
zuhe(0);
cout << vvec.size() << endl;
for(int i=0; i<vvec.size(); ++i)
{
   for(int j=0; j<vvec[i].size(); ++j)
   {
    cout << vvec[i][j] <<" ";
   }
   cout << endl;
}
return 0;
}
搜索更多相关主题的帖子: return 
2011-05-11 21:47
寒风中的细雨
Rank: 17Rank: 17Rank: 17Rank: 17Rank: 17
等 级:贵宾
威 望:66
帖 子:1710
专家分:8645
注 册:2009-9-15
收藏
得分:5 
程序什么功能?
2011-05-11 23:36
寒风中的细雨
Rank: 17Rank: 17Rank: 17Rank: 17Rank: 17
等 级:贵宾
威 望:66
帖 子:1710
专家分:8645
注 册:2009-9-15
收藏
得分:0 
//八选五的全部组合
#include <iostream>
#include <vector>
using namespace std;

int iarray[8] = {1, 2, 3, 4, 5, 6, 7, 8};
vector< vector<int> > vvec; //存放组合结果
int existFlag[8] = {0};

void   zuhe(int m)
{
    if(m>8)
    {
       return;
    }//递归终止条件 也即数据选择范围超出iarray所表示的值

    int count = 0;
    for(int i=0; i<8; ++i)
    {
       count = count + existFlag[i];
    }//统计所选择的数据个数 也即从八个数据当中已经选择出来的数据有多少个
    if( count < 5)
    {//当数据选中的个数不满足5个的时候 也即还要继续选数据
        for(int i=1; i>=0; --i)
        {
            existFlag[m] = i;//表示选中状态则置值为1 没有选中状态 置值为0
            zuhe(m+1);//进入条件递归
        }
    }
    else
    {//数据已经选中完成 现在要做的事情就是记录下来已经选好的数据记录
        vector<int> ivec;
        for(int i=0; i<8; ++i)
        {
            if( existFlag[i] == 1 )
            {
                ivec.push_back(iarray[i]);//数据元素压入向量中
            }
        }
        vvec.push_back(ivec);//压入向量
    }
}

int main()
{
    zuhe(0);
    cout << vvec.size() << endl;

    for(int i=0; i<vvec.size(); ++i)
    {
        cout << i+1 << '\t';
        for(int j=0; j<vvec[i].size(); ++j)
        {
            cout << vvec[i][j] <<" ";
        }
        cout << endl;
    }

    return 0;
}
2011-05-11 23:50
寒风中的细雨
Rank: 17Rank: 17Rank: 17Rank: 17Rank: 17
等 级:贵宾
威 望:66
帖 子:1710
专家分:8645
注 册:2009-9-15
收藏
得分:0 
        for(int i=1; i>=0; --i)
        {
            existFlag[m] = i;//表示选中状态则置值为1 没有选中状态 置值为0
            zuhe(m+1);//进入条件递归
        }

这里比较难理解点  首先 数据的状态有两种 选中 和 没有选中  
选中标记为1  没有选中标记为0

这里for(){} 循环要执行两次 第一次为选中状态 然后进入下层条件递归
第二次为没有选中状态 然后再进入条件递归
2011-05-11 23:54
morose2004
Rank: 1
等 级:新手上路
帖 子:17
专家分:0
注 册:2011-5-11
收藏
得分:0 
1
vector<vector<int> > vvec; //存放组合结果
 这个语句是不是表示容器存储的是二维数组
如果是,那么
vector<vector<vector<int>> > vvec; 是不是表示存储的是三维数组……
2
for(int i=0; i<8; ++i)
     {
        count = count + existFlag[i];
     }//统计所选择的数据个数 也即从八个数据当中已经选择出来的数据有多少个
 count初值为0,existFlag[8]的元素的值也是0,这个循环怎么能计数啊?
高手给指点下,越详细越好!
2011-05-12 07:26
宇智波曌
Rank: 2
等 级:论坛游民
帖 子:98
专家分:15
注 册:2011-4-17
收藏
得分:5 
好好学啊,c语言很重要啊
2011-05-12 07:58
lucky563591
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:4
帖 子:765
专家分:2103
注 册:2009-11-18
收藏
得分:5 
从开始就喜欢用容器
2011-05-12 08:46
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:5 
这个不知道是谁的代码,写得相当混乱。写的人的实力应该也不怎么样。
我觉得楼主要是搞不会就算了。
2011-05-12 11:19
快速回复:一个c++程序,望高手指点下
数据加载中...
 
   



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

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