编程算法 - 和为s的连续正整数序列 代码(C)

和为s的连续正整数序列 代码(C)

本文地址: http://blog.csdn.net/caroline_wendy

题目: 输入一个正数s, 打印出所有和为s的连续正数序列(至少含有两个数).

起始于1, 2, 相加, 如果相等则返回, 如果小于, 则前端递增右移, 如果大于, 则后端递增右移, 一直到后端移动到s的一半位置.

因为两个数, 小数为一半, 大数为一半加一, 则必然结束.

代码:

/*
 * main.cpp
 *
 *  Created on: 2014.6.12
 *      Author: Spike
 */

/*eclipse cdt, gcc 4.8.1*/

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void PrintContinuousSequence(int small, int big)
{
	for (int i=small; i<=big; ++i)
		printf("%d ", i);
	printf("\n");
}

void FindContinuousSequence(int sum) {
	if (sum<3)
		return;
	int small = 1;
	int big = 2;
	int middle = (1+sum)/2;
	int curSum = small+big;
	while (small < middle) {
		if (curSum == sum)
			PrintContinuousSequence(small, big);
		while (curSum > sum && small < middle) {
			curSum -= small;
			small++;
			if(curSum == sum)
				PrintContinuousSequence(small, big);
		}
		big++;
		curSum += big;
	}
}

int main(void)
{
	FindContinuousSequence(15);
	return 0;
}

输出:

1 2 3 4 5
4 5 6
7 8

编程算法 - 和为s的连续正整数序列 代码(C),布布扣,bubuko.com

时间: 2024-10-18 05:47:09

编程算法 - 和为s的连续正整数序列 代码(C)的相关文章

算法 - 求和为n的连续正整数序列(C++)

//**************************************************************************************************** // // 求和为n的连续正整数序列 - C++ - by Chimomo // // 题目: 输入一个正整数n,输出所有和为n的连续正整数序列.例如:输入15,由于1+2+3+4+5=4+5+6=7+8=15,所以输出3个连续序列1-5.4-6和7-8. // // Answer: Supp

和为S的连续正整数序列

package wangChaoPA实习工作练习.com.剑指offer;import java.util.ArrayList;/* * 解题思路:因为是连续的,所以利用大小数进行解答 如果从little到big的和等于sum * 保存little到big值到list中然后,little++,big++ 如果从little到big的和小于sum big++ * 如果从little到big的大等sum little++ */public class 和为S的连续正整数序列{    public A

编程算法 - 萨鲁曼的军队(Saruman&#39;s Army) 代码(C)

萨鲁曼的军队(Saruman's Army) 代码(C) 本文地址: http://blog.csdn.net/caroline_wendy 题目: 直线上有N个点, 每一个点, 其距离为R以内的区域里, 必须带有标记的点, 本身的距离为0. 尽可能少的添加标记点, 至少要有多少点被加上标记? 贪心算法, 从最左边的点开始, 依次查找距离为R需要添加标记的点, 直到结束. 代码: /* * main.cpp * * Created on: 2014.7.17 * Author: spike */

26.打印所有和为S的连续正整数序列

http://zhedahht.blog.163.com/blog/static/25411174200732711051101 题目: 输入一个正数n,输出所有和为n连续正数序列.例如输入15,由于1+2+3+4+5=4+5+6=7+8=15,所以输出3个连续序列1-5.4-6和7-8. 分析: 这是网易的一道面试题.这道题和本面试题系列的第10题有些类似.我们用两个数small和big分别表示序列的最小值和最大值.首先把small初始化为1,big初始化为2.如果从small到big的序列的

编程算法 - 不能被继承的类(模板参数友元) 代码(C++)

不能被继承的类(模板参数友元) 代码(C++) 本文地址: http://blog.csdn.net/caroline_wendy 题目: 用C++设计一个不能被继承的类. 可以使用模板类模板参数友元, 模板类私有构造函数, 类虚继承这个模板类, 如果类被其他类继承时, 则虚继承会直接调用模板类, 无法构造. 代码: /* * main.cpp * * Created on: 2014.7.13 * Author: Spike */ /*eclipse cdt, gcc 4.8.1*/ #inc

编程算法 - 圆圈中最后剩下的数字(递推公式) 代码(C++)

圆圈中最后剩下的数字(递推公式) 代码(C++) 本文地址: http://blog.csdn.net/caroline_wendy 题目: 0,1...,n-1这n个数字排成一个圆圈, 从数字0開始每次从这个圆圈里删除第m个数字. 求出这个圆圈里最后剩下的数字. 能够推导出约瑟夫环的递推公式, 使用循环进行求解,  时间复杂度O(n), 空间复杂度O(1). 代码: /* * main.cpp * * Created on: 2014.7.12 * Author: spike */ #incl

编程算法 - 圆圈中最后剩下的数字(循环链表) 代码(C++)

圆圈中最后剩下的数字(循环链表) 代码(C++) 本文地址: http://blog.csdn.net/caroline_wendy 题目: 0,1...,n-1这n个数字排成一个圆圈, 从数字0开始每次从这个圆圈里删除第m个数字. 求出这个圆圈里最后剩下的数字. 使用循环链表, 依次遍历删除, 时间复杂度O(mn), 空间复杂度O(n). 代码: /* * main.cpp * * Created on: 2014.7.13 * Author: Spike */ #include <iostr

编程算法 - n个骰子的点数(非递归) 代码(C)

n个骰子的点数(非递归) 代码(C) 本文地址: http://blog.csdn.net/caroline_wendy 题目: 把n个骰子仍在地上, 所有骰子朝上一面的点数之和为s. 输入n, 打印出s的所有可能的值出现的概率. 每次骰子的循环过程中, 本次等于上一次n-1, n-2, n-3, n-4, n-5, n-6的次数的总和. 代码: /* * main.cpp * * Created on: 2014.7.12 * Author: spike */ #include <stdio.

编程算法 - 数组中出现次数超过一半的数字 代码(C)

数组中出现次数超过一半的数字 代码(C) 本文地址: http://blog.csdn.net/caroline_wendy 题目: 数组中有一个数字出现的次数超过数组长度的一半, 请找出这个数字. 1. 使用高速排序(QuickSort)的方法, 把中值(middle)和索引(index)匹配, 输出中值, 并检測是否符合要求. 2. 使用计数方法依次比較. 代码:  方法1: /* * main.cpp * * Created on: 2014.6.12 * Author: Spike */