读书人

正整数N即是M个不同的正整数之和

发布时间: 2012-10-17 10:25:47 作者: rapoo

正整数N等于M个不同的正整数之和

题目:

正整数N是M个正整数之和,M比N小,且不重复。例如,N=20,M=5,N可以表示成为?
??
1+2+3+4+10 = 20?
1+2+3+5+9 = 20?
1+2+3+6+8 = 20?
1+2+4+5+8 = 20?
1+2+4+6+7 = 20?
1+3+4+5+7 = 20?
2+3+4+5+6 = 20?
Total:7

?

思路:

先确定第一个数是a,然后找出M-1个数的和为N-a

?

代码:

#include <stdio.h>#include <stdlib.h>#include <string.h>int data[100];int num = 0;void output(int total){     for(int i = total;i > 0; i--)     {      printf("%d ", data[i]);     }     printf("\n");     num++;}void findComb(int total, int count, int sum, int begin){    if( count < 0 )    {        printf("error\n");        return;    }    else if( count == 1 )    {         data[count] = sum;         output(total);         return;    }    else    {        for(int i = begin; i <= (sum-1)/count; ++i )        {                             data[count] = i;                findComb(total, count-1, sum-i, i+1);          }    }}int main(){      findComb(5, 5, 20, 1);  printf("Total: %d\n", num);   system("PAUSE");   return 0;}
?

读书人网 >编程

热点推荐