一个数的所有子序列的总和
给定一个数字作为字符串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