现在的位置: 首页 > 综合 > 正文

数的所有组合

2013年10月21日 ⁄ 综合 ⁄ 共 1210字 ⁄ 字号 评论关闭

/*

找出从自然数,,。。。,n中任取r个数的所有组合。

例如n=5r=3的所有组合为:

(1) 1,2,3  (2) 1,2,4  (3) 1,2,5 (4)1,3,4  (5) 1,3,5

(6) 1,4,5  (7) 2,3,4  (8)2,3,5 (9) 2,4,5 (10) 3,4,5

输入

n=5,r=3

输出

1-  5中所有个数的组合

*/

 

#include <iostream>

#include <vector>

using namespace std;

 

void main()

{

    int n = 0,r=0;

    cin>>n>>r;

    vector<int> myvec;

    vector<int> v_re;

    for (int i= 0;i<n;i++)

    {

       myvec.push_back(i+1);

    }

    vector<int>::iterator it_p = myvec.begin();

    vector<int>::iterator it_q = myvec.begin();

    vector<int>::iterator it_end = myvec.end();

    vector<int>::iterator it_begin = myvec.begin();

    while(it_q-it_p != r ||it_q != it_end

       ||v_re.front() != *it_p)

    {

       if (it_q == it_end)

       {

           it_q = it_p + 1;

           v_re.pop_back();

           it_p = it_begin+v_re.back()-1;

       }

       while(v_re.size() != r && it_q != it_end)

       {

           v_re.push_back(*it_q);

           it_q++;

       }

       if (v_re.size() < r)

       {

           it_p = it_begin+v_re.front();

           it_q = it_p;

           while(!v_re.empty())

              v_re.pop_back();

           if (myvec.back()-(*it_p) < (r-1))

           {

              break;

           }

           continue;

       }

       for (int j= 0;j<r;j++)

       {

           cout<<v_re[j]<<"  ";

       }

       cout<<endl;

       v_re.pop_back();

       it_p = it_begin+v_re.back()-1;

    }

}

抱歉!评论已关闭.