# 算法设计：打印给定集合的所有子集的总和

2021年3月20日15:55:48 发表评论 305 次浏览

## 本文概述

``````Input : arr[] = {2, 3}
Output: 0 2 3 5

Input : arr[] = {2, 4, 5}
Output : 0 2 4 5 6 7 9 11``````

## C ++

``````// C++ program to print sums of all possible
// subsets.
#include<bits/stdc++.h>
using namespace std;

// Prints sums of all subsets of arr[l..r]
void subsetSums( int arr[], int l, int r, int sum=0)
{
// Print current subset
if (l > r)
{
cout << sum << " " ;
return ;
}

// Subset including arr[l]
subsetSums(arr, l+1, r, sum+arr[l]);

// Subset excluding arr[l]
subsetSums(arr, l+1, r, sum);
}

// Driver code
int main()
{
int arr[] = {5, 4, 3};
int n = sizeof (arr)/ sizeof (arr[0]);

subsetSums(arr, 0, n-1);
return 0;
}``````

## Java

``````// Java program to print sums
// of all possible subsets.
import java .io.*;

class GFG
{

// Prints sums of all
// subsets of arr[l..r]
static void subsetSums( int []arr, int l, int r, int sum )
{

// Print current subset
if (l > r)
{
System.out.print(sum + " " );
return ;
}

// Subset including arr[l]
subsetSums(arr, l + 1 , r, sum + arr[l]);

// Subset excluding arr[l]
subsetSums(arr, l + 1 , r, sum);
}

// Driver code
public static void main (String[] args)
{
int []arr = { 5 , 4 , 3 };
int n = arr.length;

subsetSums(arr, 0 , n - 1 , 0 );
}
}

// This code is contributed by anuj_67``````

## Python3

``````# Python3 program to print sums of
# all possible subsets.

# Prints sums of all subsets of arr[l..r]
def subsetSums(arr, l, r, sum = 0 ):

# Print current subset
if l > r:
print ( sum , end = " " )
return

# Subset including arr[l]
subsetSums(arr, l + 1 , r, sum + arr[l])

# Subset excluding arr[l]
subsetSums(arr, l + 1 , r, sum )

# Driver code
arr = [ 5 , 4 , 3 ]
n = len (arr)
subsetSums(arr, 0 , n - 1 )

# This code is contributed by Shreyanshi Arun.``````

## C#

``````// C# program to print sums of all possible
// subsets.
using System;

class GFG {

// Prints sums of all subsets of
// arr[l..r]
static void subsetSums( int []arr, int l, int r, int sum )
{

// Print current subset
if (l > r)
{
Console.Write(sum + " " );
return ;
}

// Subset including arr[l]
subsetSums(arr, l+1, r, sum + arr[l]);

// Subset excluding arr[l]
subsetSums(arr, l+1, r, sum);
}

// Driver code
public static void Main ()
{
int []arr = {5, 4, 3};
int n = arr.Length;

subsetSums(arr, 0, n-1, 0);
}
}

// This code is contributed by anuj_67``````

## 的PHP

``````<?php
// PHP program to print sums
// of all possible subsets.

// Prints sums of all
// subsets of arr[l..r]
function subsetSums( \$arr , \$l , \$r , \$sum = 0)
{
// Print current subset
if ( \$l > \$r )
{
echo \$sum , " " ;
return ;
}

// Subset including arr[l]
subsetSums( \$arr , \$l + 1, \$r , \$sum + \$arr [ \$l ]);

// Subset excluding arr[l]
subsetSums( \$arr , \$l + 1, \$r , \$sum );
}

// Driver code
\$arr = array (5, 4, 3);
\$n = count ( \$arr );

subsetSums( \$arr , 0, \$n - 1);

// This code is contributed by anuj_67.
?>``````

``12 9 8 5 7 4 3 0``

## C ++

``````// Iterative C++ program to print sums of all
// possible subsets.
#include<bits/stdc++.h>
using namespace std;

// Prints sums of all subsets of array
void subsetSums( int arr[], int n)
{
// There are totoal 2^n subsets
long long total = 1<<n;

// Consider all numbers from 0 to 2^n - 1
for ( long long i=0; i<total; i++)
{
long long sum = 0;

// Consider binary reprsentation of
// current i to decide which elements
// to pick.
for ( int j=0; j<n; j++)
if (i & (1<<j))
sum += arr[j];

// Print sum of picked elements.
cout << sum << " " ;
}
}

// Driver code
int main()
{
int arr[] = {5, 4, 3};
int n = sizeof (arr)/ sizeof (arr[0]);

subsetSums(arr, n);
return 0;
}``````

## Java

``````// Iterative Java program to print sums of all
// possible subsets.
import java.util.*;

class GFG{

// Prints sums of all subsets of array
static void subsetSums( int arr[], int n)
{

// There are totoal 2^n subsets
int total = 1 << n;

// Consider all numbers from 0 to 2^n - 1
for ( int i = 0 ; i < total; i++)
{
int sum = 0 ;

// Consider binary reprsentation of
// current i to decide which elements
// to pick.
for ( int j = 0 ; j < n; j++)
if ((i & ( 1 << j)) != 0 )
sum += arr[j];

// Print sum of picked elements.
System.out.print(sum + " " );
}
}

// Driver code
public static void main(String args[])
{
int arr[] = new int []{ 5 , 4 , 3 };
int n = arr.length;

subsetSums(arr, n);
}
}

// This code is contributed by spp____``````

## 的PHP

``````<?php
// Iterative PHP program to print
// sums of all possible subsets.

// Prints sums of all subsets of array
function subsetSums( \$arr , \$n )
{

// There are totoal 2^n subsets
\$total = 1 << \$n ;

// Consider all numbers
// from 0 to 2^n - 1
for ( \$i = 0; \$i < \$total ; \$i ++)
{
\$sum = 0;

// Consider binary reprsentation of
// current i to decide which elements
// to pick.
for ( \$j = 0; \$j < \$n ; \$j ++)
if ( \$i & (1 << \$j ))
\$sum += \$arr [ \$j ];

// Print sum of picked elements.
echo \$sum , " " ;
}
}

// Driver code
\$arr = array (5, 4, 3);
\$n = sizeof( \$arr );
subsetSums( \$arr , \$n );

// This Code is Contributed by ajit
?>``````

``0 5 4 9 3 8 7 12``