首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

求大于0小于K的自然数相加等于K的所有组合解决方案

2012-03-16 
求大于0小于K的自然数相加等于K的所有组合有个自然数K求大于0小于K的自然数相加等于K的所有组合要求:这些

求大于0小于K的自然数相加等于K的所有组合
有个自然数K  
求大于0小于K的自然数相加等于K的所有组合  
要求:这些自然数必须互不相等  
组合之间不准重复

[解决办法]
提供一个简洁的版本,当然,这个算法还可以做很多的优化

#include <stdio.h>

int select[1024];
int count = 0;

void cal (int k, int bound)
{
if (k == 0)
{
for (int i = 0; i < count; i++)
printf ((i == count - 1) ? "%d " : "%d+ ", select[i]);
printf ( "\n ");
}
else if (k > 0)
{
for (int i = bound; i > 0; i--)
{
select[count++] = i;
cal (k - i, i - 1);
--count;
}
}
}

int main ()
{
cal (10, 9);

return 0;
}

热点排行