测评会员优惠活动进行中 · 开通 VIP,有效期内测评不限次 VIP 优惠中 · 测评不限次 立即查看

A25682. 拆分正整数编程实现给定一个正整数 n,将 n 拆成一组各不相同的正整数,使得这组正整数的个数大于等于 2 且总和为 n。请计算有多少种不同的拆法;如果不能按要求拆分,输出 0。注意:几种拆法中,如果包含的整数完全相同,仅顺序不同,则视为同一种拆法。例如:{1, 2, 3}、{2, 1, 3} 和 {3, 2, 1} 被视为同一种拆法。例如:n = 6;满足要求的拆法有以下 3 种:第一种:{1,…

填空题 中等

题目描述

拆分正整数

编程实现

给定一个正整数 n,将 n 拆成一组各不相同的正整数,使得这组正整数的个数大于等于 2 且总和为 n。

请计算有多少种不同的拆法;如果不能按要求拆分,输出 0。

注意:几种拆法中,如果包含的整数完全相同,仅顺序不同,则视为同一种拆法。例如:{1, 2, 3}、{2, 1, 3} 和 {3, 2, 1} 被视为同一种拆法。

例如:n = 6;满足要求的拆法有以下 3 种:

第一种:{1, 5};

第二种:{2, 4};

第三种:{1, 2, 3}。

输入描述

输入一个正整数 n(1≤正整数≤90)。

输出描述

输出一个整数,表示有多少种拆法满足要求。

样例输入

6

样例输出

3

参考答案

def cal(n): # dp[i] 表示将 i 拆分为若干不同的正整数的方式数 dp = [0] * (n + 1) dp[0] = 1 # 拆分 0 的方式有 1 种 # 从 1 到 n,逐步加上每个数 for i in range(1, n + 1): for j in range(n, i - 1, -1): # 倒序遍历,避免重复使用同一个数 dp[j] += dp[j - i] # 返回 dp[n] 减去拆分 1 个数的情况(即 dp[n] - 1) return dp[n] - 1 n = int(input()) print(cal(n))
上一题 下一题