ZCMU-1348-整数划分
来源:互联网 发布:pam打分矩阵 编辑:程序博客网 时间:2024/04/30 06:12
1348: 整数拆分
Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 333 Solved: 66
[Submit][Status][Web Board]
Description
对于每个正整数都可以表达成k(k>=1)个连续的正整数之和。例如15=1+2+3+4+5=4+5+6=7+8=15,所以15一共4种拆分方法。你的任务是输入一个正整数n,输出n有几种拆法。
Input
多组测试数据,每组测试数据包含一个正整数n(1<=n<=10^5)。
Output
对于每组测试数据,输出一个整数代表n有几种拆法。
Sample Input
15
Sample Output
4
【解析】
这道题的话其实我们可以这么想,如果这个整数只有一个划分,那么就是n,如果有两个那就是n,n+1,n+2,如果有三
个那就是n, n,n+1, n,n+1,n+2.所以一直到如果有m种划分那就是n+...+n+m-1,这样的话其实满足一个公式的其实就
是(i * x + i * (i - 1) / 2) = n,i为当前划分后相加的正整数个数。拿15举例子吧当i = 1时,即划分成一个正
整数时,x = 15, 当i = 2时, x = 7。当x = 3时,x = 4, 当x = 4时,4/9,不是正整数,因此,15不可能划分成
4个正整数相加。当x = 5时,x = 1。还有一点就是i的范围我们要确立很显然既然有(i * x + i * (i - 1) / 2)=n那么就说明i*(i-1)/2最大也不能超过n所以我们的范围就已经知道了。
#include<stdio.h>int facs(int n){ int i, j, m = 0, x, t1, t2; for(i = 1; (t1=i * (i - 1) / 2) < n; i++)//i的范围 { t2 = (n-t1); x = t2 /i; if(x <= 0) break; if((n - t1)%i == 0) { m++; } } return m;}int main(){ int n,m; while(~scanf("%d",&n)) { m=facs(n); printf("%d\n",m); } return 0;}
0 0
- ZCMU-1348-整数划分
- ZCMU-1163-分数划分
- 整数划分
- 整数划分
- 整数划分
- 整数划分
- 整数划分
- 整数划分
- 整数划分
- 整数划分
- 整数划分
- 整数划分
- 整数划分
- 整数划分
- 整数划分
- 整数划分
- 整数划分:
- 整数划分
- 网络程序设计课程项目学习总结
- sql server 事务
- 【OpenCV】访问Mat中每个像素的值(新)
- 文件操作
- 产品研发记录01:为什么需要基础开发框架产品
- ZCMU-1348-整数划分
- EOJ 3174 入栈出栈
- openlayers3入门——类、方法、属性详解1
- Xcode不小心修改了自带头文件,导致无法编译成功
- 常用英语短信缩略语
- spring事务异常回滚,捕获异常不抛出就不会回滚
- 工厂模式的生产披萨例子
- Linux:实现自己的pwd命令
- Java数据结构与算法:二叉树