时间限制(普通/Java) : 1000 MS/ 3000 MS 运行内存限制 : 65536 KByte
总提交 : 122 测试通过 : 42
比赛描述
最近,好学的张同学遇到了一个难题:
将整数n分为一串非递增数列之和。比如可以将8分为[4,4],[3,3,2],[5,2,1][2,2,1,1,1,1]等等。当然[2,6],[6,3],[3,5],[12,-4],[1,2,3,2]并不符合这种规则。定义一个数列中最大的数的数量为一个数列的权重。比如[1,1,1,1]的权重为4,[5,5,4,3]的权重为2,[6]的权重为1。张同学想知道对于整数n所产生的数列,共有几种不同的权重。但是张同学最近忙于和学姐约会,就找到了号称资深僚机的你帮忙。当然,乐于助人的你毫不犹豫的就答应了。聪明的你该如何解决呢?
输入
输入包含一行,这一行含有一个整数n(1≤n≤109)
输出
输出为一个整数,代表不同的权重的种类数
样例输入
7
样例输出
4
提示
对于第一个样例7,有如下几种不同的权重:
1:[7]
2:[3,3,1]
3:[2,2,2,1]
7:[1,1,1,1,1,1,1]
题解:7/1 = 7,7/2=3,7/3=2,7/4=1,7/5=1,7/6=1.7/7=1;一个7,两个3,三个2,四个1,五个1,六个1,七个1;
可以知道有n/2+1种权重
代码:
#include<stdio.h> int main() { int n; scanf("%d", &n); printf("%d\n", n/2+1); return 0; }