求解算法:输出从n个自然数中取出k个(k<=n)的所有组合。

lansedamo 2007-12-12 06:40:33
求解算法:输出从n个自然数中取出k个(k<=n)的所有组合。例如当n=5,k=3时,算法输出:543,542,541,532,531,521,432,431,421,321。
...全文
421 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
lansedamo 2007-12-12
  • 打赏
  • 举报
回复
谢谢大家
lansedamo 2007-12-12
  • 打赏
  • 举报
回复
为什么我还是看不到我的答案。
lansedamo 2007-12-12
  • 打赏
  • 举报
回复
为什么不显示回复呢?
pptor 2007-12-12
  • 打赏
  • 举报
回复
http://topic.csdn.net/u/20071124/11/968809b3-12cd-455b-9f07-4c6938fa31fb.html
medie2005 2007-12-12
  • 打赏
  • 举报
回复
上面的格式不好,再发一次:
#include   <iostream>
#include <iterator>

using namespace std;

void combination( int n, int m ){
int *A=new int[n+1], *B=new int[m+1];
int i, j;
for( i=1; i<=n; ++i ) A[i]=i;
for( i=1; i<=m; ++i ) B[i]=m;
while( B[1]<n ){
copy( A+1, A+m+1, ostream_iterator<int>(cout, " ") ),cout<<endl;
j=m;
while( B[j]==n )
--j;
++B[j];
for( i=j+1; i<=m; ++i )
B[i]=B[j];
swap( A[j], A[B[j]] );
}
copy( A+1, A+m+1, ostream_iterator<int>(cout, " ") ),cout<<endl;
delete []A; delete []B;
}

int main(int argc, char *argv[])
{
combination( 5, 3 );
return 0;
}
medie2005 2007-12-12
  • 打赏
  • 举报
回复
[code=C/C#include <iostream>
#include <iterator>

using namespace std;

void combination( int n, int m ){
int *A=new int[n+1], *B=new int[m+1];
int i, j;
for( i=1; i<=n; ++i ) A[i]=i;
for( i=1; i<=m; ++i ) B[i]=m;
while( B[1]<n ){
copy( A+1, A+m+1, ostream_iterator<int>(cout, " ") ),cout<<endl;
j=m;
while( B[j]==n )
--j;
++B[j];
for( i=j+1; i<=m; ++i )
B[i]=B[j];
swap( A[j], A[B[j]] );
}
copy( A+1, A+m+1, ostream_iterator<int>(cout, " ") ),cout<<endl;
delete []A; delete []B;
}

int main(int argc, char *argv[])
{
combination( 5, 3 );
return 0;
} [/code]

33,008

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧