对于给定的数字 n > 0,找出 n 可以写成两个或多个正整数之和的不同方式的数量。
例子:
Input : n = 5
Output : 6
Explanation : All possible six ways are :
4 + 1
3 + 2
3 + 1 + 1
2 + 2 + 1
2 + 1 + 1 + 1
1 + 1 + 1 + 1 + 1
Input : 4
Output : 4
Explanation : All possible four ways are :
3 + 1
2 + 2
2 + 1 + 1
1 + 1 + 1 + 1
这个问题可以用与硬币找零问题类似的方式解决,区别只是在这种情况下我们应该迭代 1 到 n-1,而不是像硬币找零问题那样迭代特定的硬币值。
C++
// Program to find the number of ways, n can be
// written as sum of two or more positive integers.
#include
using namespace std;
// Returns number of ways to write n as sum of
// two or more positive integers
int countWays(int n)
{
// table[i] will be storing the number of
// solutions for value i. We need n+1 rows
// as the table is consturcted in bottom up
// manner using the base case (n = 0)
int table[n+1];
// Initialize all table values as 0
memset(table, 0, sizeof(table));
// Base case (If given value is 0)
table[0] = 1;
// Pick all integer one by one and update the
// table[] values after the index greater
// than or equal to n
for (int i=1; i
Java
// Program to find the number of ways,
// n can be written as sum of two or
// more positive integers.
import java.util.Arrays;
class GFG {
// Returns number of ways to write
// n as sum of two or more positive
// integers
static int countWays(int n)
{
// table[i] will be storing the
// number of solutions for value
// i. We need n+1 rows as the
// table is consturcted in bottom
// up manner using the base case
// (n = 0)
int table[] = new int[n + 1];
// Initialize all table values as 0
Arrays.fill(table, 0);
// Base case (If given value is 0)
table[0] = 1;
// Pick all integer one by one and
// update the table[] values after
// the index greater than or equal
// to n
for (int i = 1; i < n; i++)
for (int j = i; j <= n; j++)
table[j] += table[j - i];
return table[n];
}
//driver code
public static void main (String[] args)
{
int n = 7;
System.out.print(countWays(n));
}
}
// This code is contributed by Anant Agarwal.
Python
# Program to find the number of ways, n can be
# written as sum of two or more positive integers.
# Returns number of ways to write n as sum of
# two or more positive integers
def CountWays(n):
# table[i] will be storing the number of
# solutions for value i. We need n+1 rows
# as the table is consturcted in bottom up
# manner using the base case (n = 0)
# Initialize all table values as 0
table =[0] * (n + 1)
# Base case (If given value is 0)
# Only 1 way to get 0 (select no integer)
table[0] = 1
# Pick all integer one by one and update the
# table[] values after the index greater
# than or equal to n
for i in range(1, n ):
for j in range(i , n + 1):
table[j] += table[j - i]
return table[n]
# driver program
def main():
n = 7
print CountWays(n)
if __name__ == '__main__':
main()
#This code is contributed by Neelam Yadav
C#
// Program to find the number of ways, n can be
// written as sum of two or more positive integers.
using System;
class GFG {
// Returns number of ways to write n as sum of
// two or more positive integers
static int countWays(int n)
{
// table[i] will be storing the number of
// solutions for value i. We need n+1 rows
// as the table is consturcted in bottom up
// manner using the base case (n = 0)
int []table = new int[n+1];
// Initialize all table values as 0
for(int i = 0; i < table.Length; i++)
table[i] = 0;
// Base case (If given value is 0)
table[0] = 1;
// Pick all integer one by one and update the
// table[] values after the index greater
// than or equal to n
for (int i = 1; i < n; i++)
for (int j = i; j <= n; j++)
table[j] += table[j-i];
return table[n];
}
//driver code
public static void Main()
{
int n = 7;
Console.Write(countWays(n));
}
}
// This code is contributed by Anant Agarwal.
PHP
Javascript
输出:
14
如果您希望与专家一起参加现场课程,请参阅DSA 现场工作专业课程和学生竞争性编程现场课程。