我们定义一个不上升的且和为 n 的正整数序列,叫做 n 的分解.
比如, 下面是8的分解: [4, 4], [3, 3, 2], [2, 2, 1, 1, 1, 1], [5, 2, 1].
而这些则不是8的分解: [1, 7], [5, 4], [11, -3], [1, 1, 4, 1, 1].
一个分解的权值等于第一个数的个数. 例如, [1, 1, 1, 1, 1] 的权值是 5, [5, 5, 3, 3, 3] 的权值是 2, [9] 的权值是 1.
给定一个 n, 找到不同权值的分解的个数.
Input
第一行输入一个整数 n (1 <= n <= 10^9).
Output
输出一个整数 — 即上述问题的答案.
Examples
1 Input 2 7 3 Output 4 4 5 Input 6 8 7 Output 8 5 9 Input 10 9 11 Output 12 5
Note
第一组样例,下面是可能的 7的分解的权值:
权值为 1: [7]
权值为 2: [3, 3, 1]
权值为 3: [2, 2, 2, 1]
权值为 7: [1, 1, 1, 1, 1, 1, 1]
思路:
本题就是要求一个数可以分解为不上升的且和为 n 的正整数序列的个数。一开始想的挺复杂的,但后来列举答案的时候,发现了规律,就是如下图:
n 个数 1 1 2 2 3 2 4 3 5 3 6 4 7 4 8 5 9 5 10 6 11 6
怎样,是不是很神奇(?◇?) ,因此,代码如下:
1 #include<stdio.h> 2 #define ll long long 3 4 int main() 5 { 6 ll n; 7 scanf("%lld",&n); 8 printf("%lld\n",n/2+1); 9 return 0; 10 }
原文:https://www.cnblogs.com/lovelycaier/p/12676475.html