求一段连续整数区间的和
来源:互联网 发布:用python做的网站 编辑:程序博客网 时间:2024/05/01 22:45
2058The sum problem
Problem DescriptionGiven a sequence 1,2,3,......N, your job is to calculate all the possible sub-sequences that the sum of the sub-sequence is M.
Input
Input contains multiple test cases. each case contains two integers N, M( 1 <= N, M <= 1000000000).input ends with N = M = 0.
Output
For each test case, print all the possible sub-sequence that its sum is M.The format is show in the sample below.print a blank line after each test case.
Sample Input
20 10
50 30
0 0
Sample Output
[1,4]
[10,10]
[4,8]
[6,9]
[9,11]
[30,30]
一
数据又是Input contains multiple test cases. each case contains two integers N, M( 1 <= N, M <= 1000000000).input ends with N = M = 0.
10的10次方。数字很大直接枚举肯定是不行的。
一般我们遇到这么的数据时;有两种考虑
1;想办法去开方;
2;找规律;
然而我们这题肯定是要用暴力的,所以就向着第一种方法考虑,想办法去开方,将数据降低;
二
求在1到n的连续数串中的子串的和是m的情况;
要想到是等差数列,并且使用等差公式去求解;
1~n;可以知道这是等差数列,所以等下不要去一个个去加。因为有等差公式;等差求和公式;
三
还有一个关键点就是可以知道和是m的最长子串的长度是好多;
最长就是元素最小的串,可以求出;cd = sqrt((double)(m*2));
然而我们就可以去枚举长度了。
#include<stdio.h>
#include<math.h>
int main()
{
long long int n, m,cd,a1;
while(scanf("%lld %lld",&n, &m) != EOF && (n != 0 || m != 0)){
cd = sqrt((double)(m*2));//子串最长为;1~cd之和大于m;
while(cd){//已知长度已知sum;求两个边界也就是a1和an;
a1 = m/cd-(cd-1)/2;
//计算初值,即a1并且 是整数不需要考虑除法;
if(a1*cd+cd*(cd-1)/2 == m){
printf("[%lld,%lld]\n",a1,a1+cd-1);
}
cd--;
}
printf("\n");
}
return 0 ;
}
1 0
- 求一段连续整数区间的和
- 求连续区间上所有整数的最小公倍数的方法
- 【解题报告】HDU 4638 Group - 树状数组 + 求一段区间连续数字的段数
- 求数组中连续区间的和最大
- 贪心算法-求区间至少连续k的最大和
- 求最大连续区间和的几种方法
- 求一个字符串中所有连续的整数和
- 求一个整数分解成连续数字的和
- 求一段区间内素数的个数
- 连续整数的和
- 连续整数的和
- 关于求连续区间的最小公倍数
- 邮票面值,求最大的连续区间
- 求一段字符串中连续出现次数最多的单个字符和分解字符串
- 连续整数的固定和
- 连续整数的固定和
- 给定一段连续的整数,求出他们中所有偶数的平方和以及所有奇数的立方和。
- 关于求一段最大的连续矩形面积
- 山东省第一届ACM省赛 D SDUT 2154 Shopping
- Android ListView 几个重要属性
- 编码格式介绍
- Problem A: 判断操作是否合法(栈和队列)
- 4.传输控制协议(TCP):进程到进程的通信
- 求一段连续整数区间的和
- 前端开发学习笔记05---HTML高级教程
- iOS形变之CGAffineTransform
- Problem J: 选择法排序
- 自定义View实现顶部Tab指示器
- Android开发像素相关知识
- Problem B: 出栈顺序(栈和队列)
- SQL语句的执行顺序
- Xcode7.2如何真机调试iOS 9.3的设备