C - Splits
Posted lovelycaier
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C - Splits相关的知识,希望对你有一定的参考价值。
我们定义一个不上升的且和为 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/2+1); 9 return 0; 10 }
以上是关于C - Splits的主要内容,如果未能解决你的问题,请参考以下文章
ValueError: n_splits=10 不能大于每个类的成员数
Android Gradle 插件 Splits 配置 ① ( BaseExtension#splits 配置 | Splits 配置简介 )
Android Gradle 插件Splits 配置 ④ ( Splits#language{} 脚本块配置 | 根据语言进行分包 | LanguageSplitOptions 配置简介 )
Android Gradle 插件Splits 配置 ③ ( Splits#density{} 脚本块配置 | 根据屏幕像素密度进行分包 | DensitySplitOptions 配置简介 )
Android Gradle 插件 Splits 配置 ② ( Splits#abi{} 脚本块配置 | 根据 CPU 架构进行分包 | AbiSplitOptions 配置简介 )