和为n连续正数序列(栈和队列)
时间: 1ms 内存:1000M
描述:
题目:输入一个正数n,输出所有和为n连续正数序列。
例如输入15,由于1+2+3+4+5=4+5+6=7+8=15,所以输出3个连续序列1,2,3,4,5和4,5,6和7,8。
输入:
输入:
15
输出:
输出:
1 2 3 4
4 5 6
7 8
示例输入:
15
示例输出:
1 2 3 4 5
4 5 6
7 8
提示:
参考答案(内存最优[748]):
#include<stdio.h>
void f(int small, int big)
{
int i;
for(i=small;i<big;i++)
printf("%d ", i);
printf("%d\n",big);
}
void ff(int n)
{
if(n<3)
return;
int small=1;
int big=2;
int middle=(1+n)/2;
int sum=small+big;
while(small<middle)
{
if(sum==n)
f(small,big);
while(sum>n)
{
sum-=small;
small++;
if(sum==n)
f(small,big);
}
big ++;
sum += big;
}
}
int main()
{
int n;
scanf("%d",&n);
ff(n);
return 0;
}
参考答案(时间最优[0]):
#include<stdio.h>
void f(int small, int big)
{
int i;
for(i=small;i<big;i++)
printf("%d ", i);
printf("%d\n",big);
}
void ff(int n)
{
if(n<3)
return;
int small=1;
int big=2;
int middle=(1+n)/2;
int sum=small+big;
while(small<middle)
{
if(sum==n)
f(small,big);
while(sum>n)
{
sum-=small;
small++;
if(sum==n)
f(small,big);
}
big ++;
sum += big;
}
}
int main()
{
int n;
scanf("%d",&n);
ff(n);
return 0;
}
题目和答案均来自于互联网,仅供参考,如有问题请联系管理员修改或删除。