和为n连续正数序列(栈和队列)

和为n连续正数序列(栈和队列)

时间: 1ms        内存:1000M

描述:

题目:输入一个正数n,输出所有和为n连续正数序列。
例如输入15,由于1+2+3+4+5=4+5+6=7+8=15,所以输出3个连续序列

1234545678

输入:

输入:

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;
}

题目和答案均来自于互联网,仅供参考,如有问题请联系管理员修改或删除。

点赞

发表评论

电子邮件地址不会被公开。必填项已用 * 标注