一个集合的算法问题的解决
来源:互联网 发布:卖淘宝小号的 编辑:程序博客网 时间:2024/06/05 10:25
在qszhoufuge那里看到“一个集合的算法问题”题目如下:
设计算法以求解从集合{1..n}中选取k(k<=n)个元素的所有组合。例如,从集合{1..4}中选取2个元素的所有组合的输出结果为:1 2,1 3,1 4,2 3, 2 4,3 4。
早上在家的时候随手写了一个用循环解决的,因为没环境测试,下午有时间的时候测试发现错了,哈哈。非常抱歉啊。
后来一想,其实这个不难,用递归可以很好解决,于是乎就静下心来思考,其实用递归实现真的不复杂,这次终于一次性通过了,^_^
实现算法如下(经过测试的):
#include <stdio.h>
//显示组合
//nCount:组合的个数
//p:数组指针
inline void p2s(int nCount,int *p)
{
for (int i = 0;i<nCount;++i)
{
printf("/t%d",*(p + i));
}
printf("/r/n");
}
//递归组合
//nStart 开始数
//nMax: 最大数值
//nCount:组合的个数
//nIndex:组合索引(组合中的第几个数,0开始)
//p:数组指针
void func0(int nStart,int nMax,int nCount,int nIndex,int * p)
{
for (int i = nStart;i< nMax - nCount + nIndex + 2;i++)
{
*(p + nIndex) = i;
if (nCount - 1 == nIndex)
{
p2s(nCount,p);
}
else
{
func0(i + 1,nMax,nCount,nIndex + 1,p);
}
}
}
//组合算法
//n:范围:1~n
//nCount:组合的个数
void func(int n,int k)
{
int* p = new int[k];
func0(1,n,k,0,p);
}
int _tmain(int argc, _TCHAR* argv[])
{
func(4,2);
getchar();//等待退出
return 0;
}
- 一个集合的算法问题的解决
- 一个算法问题的解决
- 全排序算法解决逻辑问题的一个例子
- 集合子集的一个Java算法
- 求一个集合的所有子集 输出一个数所有平方和的情况 背包问题的递归解决
- 一个小问题的解决
- 解决一个Lnk2001的问题
- Amavisd 一个问题的解决
- Amavisd 一个问题的解决
- 一个小问题的解决
- 一个囧问题的解决
- 一个未解决的问题
- framebuffer一个问题的解决
- 一个网络问题的解决
- 解决aspx的一个问题
- 一个没解决的问题
- My98DatePicker一个问题的解决
- 一个svn问题的解决
- 我的笔记
- 安装.net2008后,再安装.net2003,运行项目时遇到的问题解决方案!
- 奋斗日记
- 学习到这突然停住了
- Pku acm 1163 the Triangle
- 一个集合的算法问题的解决
- Pku acm 1579 Function Run Fun
- Pku acm 2081 Recaman's Sequence
- 为什么C程序中定义结构时经常要用到typedef呢?
- Pku acm 1458 Common Subsequence
- Pku acm 2250 Compromise
- SQL 和Oracle对数据库事务处理的差异性
- Pku acm 1159 Palindrome
- 给定一个文件夹,计算出文件中一共有多少个文件