C++如何实现C(n,m)的组合问题,即从n个元素里面取出m个元素,并打印出这些元素

棋子021230 2013-06-14 04:55:17
小弟现在在做一个项目,要求如题,是彩票相关的一个软件,有一种玩法叫11选5。

也就是从1,2,...,11中选出5个数,并打印出他们的组合(由小到大,最好内部排好序,实在不行的话求出来之后再加一个排序函数也可以),打印出来的效果应该是这样:

1 2 3 4 5
1 2 3 4 6
1 2 3 4 7
...
...
7 8 9 10 11(可能顺序不完全一样,但只要举全了就行)

希望能贴出代码,11选5的总组合数应该是462种,网上流传的一些算法基本上我都试过了,根本不全,有的只算出来300多种。

如果打印出来的结果不太好数的话,这里提供一个比较简单的鉴别全不全的方法,
就是看看有没有 7 8 9 10 11和1 2 3 4 5,

谢谢!
...全文
506 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
棋子021230 2013-06-15
  • 打赏
  • 举报
回复
亲测可用,十分感谢!
victor_woo 2013-06-14
  • 打赏
  • 举报
回复
455: 5-7-9-10-11 456: 5-8-9-10-11 457: 6-7-8-9-10 458: 6-7-8-9-11 459: 6-7-8-10-11 460: 6-7-9-10-11 461: 6-8-9-10-11 462: 7-8-9-10-11 Press any key to continue
victor_woo 2013-06-14
  • 打赏
  • 举报
回复

#include "stdafx.h"
#include<stdio.h>
int main()
{
	int SOURCE1[] = {1,2,3,4,5,6,7,8,9,10,11};
	int SOURCE2[] = {1,2,3,4,5,6,7,8,9,10,11};
	int SOURCE3[] = {1,2,3,4,5,6,7,8,9,10,11};
	int SOURCE4[] = {1,2,3,4,5,6,7,8,9,10,11};
	int SOURCE5[] = {1,2,3,4,5,6,7,8,9,10,11};
	
	int nCounter = 1;

	for(int i1=1;i1<=11;i1++)
		for(int i2=1;i2<=11;i2++)
			for(int i3=1;i3<=11;i3++)
				for(int i4=1;i4<=11;i4++)
					for(int i5=1;i5<=11;i5++)
					{
						if(i2==i1
						 ||i3==i1
						 ||i4==i1
						 ||i5==i1
						 ||i3==i2
						 ||i4==i2
						 ||i5==i2
						 ||i4==i3
						 ||i5==i3
						 ||i5==i4)
							continue;

						if(i1>i2
						 ||i2>i3
						 ||i3>i4
						 ||i4>i5)
							continue;
						
						 printf("%d: %d-%d-%d-%d-%d\n",nCounter++,i1,i2,i3,i4,i5);
					}
}

19,468

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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