和为S的连续正数序列(剑指offer) 两个个指针的应用
2015-10-09 17:03
309 查看
和为S的连续正数序列
参与人数:1005时间限制:1秒空间限制:32768K
通过比例:26.06%
最佳记录:0 ms|0K(来自 平方宁)
小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100。但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数)。没多久,他就得到另一组连续正数和为100的序列:18,19,20,21,22。现在把问题交给你,你能不能也很快的找出所有和为S的连续正数序列? Good Luck!
输出描述:
链接:http://www.nowcoder.com/practice/c451a3fd84b64cb19485dad758a55ebe?rp=3&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking
思路:和前面题意一样,用两个指针来控制区间段,小了,后的指针往后移动;大了,前指针后移;
#include<cstdio>
#include<vector>
using namespace std;
class Solution {
public:
vector<vector<int> > FindContinuousSequence(int sum) {
int start=1,end=2;
vector<vector<int> >arr;
if(sum<start+end) return arr;
int tmp=start+end;
while(start+end<sum||end-start==1)
{
// printf("start=%d\tend=%d\n",start,end);
if(tmp<=sum)
{
if(tmp==sum)
{
int i=start;
int j=end;
vector<int> vec;
while(i<=j)
{
vec.push_back(i++);
}
arr.push_back(vec);
}
end++;
tmp+=end;
}
else
{
tmp-=start;
start++;
}
}
return arr;
}
};
int main()
{
int n;
Solution so;
while(~scanf("%d",&n))
{
vector<vector<int> >arr=so.FindContinuousSequence(n);
for(int i=0;i<arr.size();i++)
{
for(int j=0;j<arr[i].size();j++)
{
printf("%d ",arr[i][j]);
}
printf("\n");
}
}
return 0;
}
参与人数:1005时间限制:1秒空间限制:32768K
通过比例:26.06%
最佳记录:0 ms|0K(来自 平方宁)
题目描述
小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100。但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数)。没多久,他就得到另一组连续正数和为100的序列:18,19,20,21,22。现在把问题交给你,你能不能也很快的找出所有和为S的连续正数序列? Good Luck! 输出描述:
输出所有和为S的连续正数序列。序列内按照从小至大的顺序,序列间按照开始数字从小到大的顺序
链接:http://www.nowcoder.com/practice/c451a3fd84b64cb19485dad758a55ebe?rp=3&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking
思路:和前面题意一样,用两个指针来控制区间段,小了,后的指针往后移动;大了,前指针后移;
#include<cstdio>
#include<vector>
using namespace std;
class Solution {
public:
vector<vector<int> > FindContinuousSequence(int sum) {
int start=1,end=2;
vector<vector<int> >arr;
if(sum<start+end) return arr;
int tmp=start+end;
while(start+end<sum||end-start==1)
{
// printf("start=%d\tend=%d\n",start,end);
if(tmp<=sum)
{
if(tmp==sum)
{
int i=start;
int j=end;
vector<int> vec;
while(i<=j)
{
vec.push_back(i++);
}
arr.push_back(vec);
}
end++;
tmp+=end;
}
else
{
tmp-=start;
start++;
}
}
return arr;
}
};
int main()
{
int n;
Solution so;
while(~scanf("%d",&n))
{
vector<vector<int> >arr=so.FindContinuousSequence(n);
for(int i=0;i<arr.size();i++)
{
for(int j=0;j<arr[i].size();j++)
{
printf("%d ",arr[i][j]);
}
printf("\n");
}
}
return 0;
}
相关文章推荐
- 关于指针的一些事情
- C# Pointer指针应用实例简述
- C++智能指针实例详解
- C++指向函数的指针实例解析
- 关于c语言指针的两处小tip分享
- 浅析iterator与指针的区别
- 探讨C++中数组名与指针的用法比较分析
- 详解C++中的指针、数组指针与函数指针
- C++中字符串以及数组和指针的互相使用讲解
- C语言安全之数组长度与指针实例解析
- C++中指向对象的常指针与指向常对象的指针详解
- 指向变量的常指针与指向常变量的指针详细解析
- C#通过指针实现快速拷贝的方法
- php中将指针移动到数据集初始位置的实现代码[mysql_data_seek]
- C#通过指针读取文件的方法
- C语言指针学习经验总结浅谈
- C++交换指针实例
- C/C++中指针和引用之相关问题深入研究
- C++基础入门教程(四):枚举和指针
- c++传递函数指针和bind的示例