📜  一个数的所有子序列的总和

📅  最后修改于: 2022-05-13 01:57:08.345000             🧑  作者: Mango

一个数的所有子序列的总和

给定一个数字作为字符串s,求 s 的所有可能子序列中存在的所有元素的总和。
例子 :

Input : s = "123" 
Output : 24 
Explanation : all possible sub-sequences are 
1, 2, 3, {1, 2}, {2, 3}, {1, 3}, {1, 2, 3} 
which add up to 24 

Input : s = "453" 
Output : 48 

方法:使用幂集,我们可以找到所有子序列,并在不同的函数中单独总结所有子序列。可能的子序列总数为 2 n -1。将所有子序列的总和添加到作为最终输出的组合总和中。
下面是上述方法的实现。

C++
// CPP program to find the sum of
// elements present in all subsequences
#include 
using namespace std;
 
// Returns numeric value of a subsequence of
// s. The subsequence to be picked is decided
// using bit pattern of num (We pick all those
// digits for which there is a set bit in num)
int findSubSequence(string s, int num)
{ 
    // Initialize the result
    int res = 0;
 
    // till n!=0
    int i = 0;
    while (num) {
         
        // if i-th bit is set
        // then add this number
        if (num & 1)
            res += s[i] - '0';
        i++;
         
        // right shift i
        num = num >> 1;
    }
 
    return res;
}
 
// function to find combined sum
// of all individual subsequence sum
int combinedSum(string s)
{
    // length of string
    int n = s.length();
     
    // stores the combined
    int c_sum = 0;
 
    // 2^n-1 subsequences
    int range = (1 << n) - 1;
 
    // loop for all subsequences
    for (int i = 0; i <= range; i++)
        c_sum += findSubSequence(s, i);
 
    // returns the combined sum
    return c_sum;
}
 
// driver code
int main()
{
    string s = "123";
    cout << combinedSum(s);   
    return 0;
}


Java
// Java program to find the sum of elements
// present in all subsequences
import java.io.*;
 
class GFG {
     
    // Returns numeric value of a
    // subsequence of s. The subsequence
    // to be picked is decided using bit
    // pattern of num (We pick all those
    // digits for which there is a set
    // bit in num)
    static int findSubSequence(String s,
                                int num)
    {
        // Initialize the result
        int res = 0;
     
        // till n!=0
        int i = 0;
        while (num > 0) {
             
            // if i-th bit is set
            // then add this number
            if ((num & 1) == 1)
                res += s.charAt(i) - '0';
            i++;
             
            // right shift i
            num = num >> 1;
        }
     
        return res;
    }
 
    // function to find combined sum
    // of all individual subsequence
    // sum
    static int combinedSum(String s)
    {
         
        // length of String
        int n = s.length();
         
        // stores the combined
        int c_sum = 0;
     
        // 2^n-1 subsequences
        int range = (1 << n) - 1;
     
        // loop for all subsequences
        for (int i = 0; i <= range; i++)
            c_sum += findSubSequence(s, i);
     
        // returns the combined sum
        return c_sum;
    }
 
    // Driver function
    public static void main (String[] args) {
     
        String s = "123";
        System.out.println(combinedSum(s));
    }
 
}
 
// This code is contributed by Anuj_ 67


Python 3
# Python 3 program to find the sum of
# elements present in all subsequences
  
# Returns numeric value of a subsequence of
# s. The subsequence to be picked is decided
# using bit pattern of num (We pick all those
# digits for which there is a set bit in num)
def findSubSequence(s, num):
 
    # Initialize the result
    res = 0
  
    # till n!=0
    i = 0
    while (num) :
          
        # if i-th bit is set
        # then add this number
        if (num & 1):
            res += ord(s[i]) - ord('0')
        i+=1
          
        # right shift i
        num = num >> 1
  
    return res
  
# function to find combined sum
# of all individual subsequence sum
def combinedSum(s):
 
    # length of string
    n = len(s)
      
    # stores the combined
    c_sum = 0
  
    # 2^n-1 subsequences
    ran = (1 << n) - 1
  
    # loop for all subsequences
    for i in range( ran+1):
        c_sum += findSubSequence(s, i)
  
    # returns the combined sum
    return c_sum
  
# driver code
if __name__ == "__main__":
     
    s = "123"
    print(combinedSum(s))


C#
// C# program to find the sum of elements
// present in all subsequences
using System;
 
class GFG {
     
    // Returns numeric value of a
    // subsequence of s. The subsequence
    // to be picked is decided using bit
    // pattern of num (We pick all those
    // digits for which there is a set
    // bit in num)
    static int findSubSequence(string s,
                                 int num)
    {
        // Initialize the result
        int res = 0;
     
        // till n!=0
        int i = 0;
        while (num > 0) {
             
            // if i-th bit is set
            // then add this number
            if ((num & 1) == 1)
                res += s[i] - '0';
            i++;
             
            // right shift i
            num = num >> 1;
        }
     
        return res;
    }
 
    // function to find combined sum
    // of all individual subsequence
    // sum
    static int combinedSum(string s)
    {
         
        // length of string
        int n = s.Length;
         
        // stores the combined
        int c_sum = 0;
     
        // 2^n-1 subsequences
        int range = (1 << n) - 1;
     
        // loop for all subsequences
        for (int i = 0; i <= range; i++)
            c_sum += findSubSequence(s, i);
     
        // returns the combined sum
        return c_sum;
    }
 
    // Driver function
    public static void Main()
    {
        string s = "123";
        Console.Write(combinedSum(s));
    }
 
}
 
// This code is contributed by Sam007


PHP
> 1;
    }
 
    return $res;
}
 
// function to find combined sum
// of all individual subsequence sum
function combinedSum(string $s)
{
     
    // length of string
    $n = strlen($s);
     
    // stores the combined
    $c_sum = 0;
 
    // 2^n-1 subsequences
    $range = (1 << $n) - 1;
 
    // loop for all subsequences
    for ($i = 0; $i <= $range; $i++)
        $c_sum += findSubSequence($s, $i);
 
    // returns the combined sum
    return $c_sum;
}
 
    // Driver Code
    $s = "123";
    echo combinedSum($s);
     
// This code is contributed by Anuj_67
?>


Javascript


输出:

24