任一给4个正整数,求出它的所有加和的总数。并按相应的格式打印出来
如:1,2,3,4
共有加和数10种。
结果打印如下:
和为1有1种
1=1;
和为2有1种
2=2;
...
和为6有2种
6=1+2+3;
6=2+4;
...
和为10有1种
10=1+2+3+4;
#include<iostream>
#include<algorithm>
using namespace std ;
int a[]={1,2,3,4} , b[10] , l = 0 , vi[5] , flag ;
void print()
{
for(int i = 0 ; i < l ; i ++)
cout<<b[i]<<" ";
cout<<endl;
return ;
}
void DFS(int sum )
{
if(sum == 0){
print();
return ;
}
if(sum <=0)
return ;
for(int i = 0 ; i < 4 ; i ++)
{
if(!vi[i] && flag <= i)
{
flag = i ;
vi[i] = 1 ;
b[l++] = a[i] ;
DFS(sum - a[i]);
flag = i;
l-- ;
vi[i] = 0 ;
}
}
}
int main(void)
{
int i , j ;
flag = 0 ;
memset(vi , 0 , sizeof(vi));
int num[16] , s = 0 ;
for( i = 0 ; i < 4 ; i ++)
for( j = i ; j < 4 ; j ++)
{
int sum = 0 ;
for( int k = i ; k <= j ; k ++)
sum +=a[k] ;
num[s++] = sum ;
}
sort(num , num + s);
for( i = 0 ; i < s ; i ++)
{
cout<<"sum = "<<num[i]<<":"<<endl; ;
l = 0 ;
flag = 0 ;
DFS(num[i] );
}
return 0;
}