求大于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;
}