输入一个正数s,打印出所有和为s的连续正数序列

来源:互联网 发布:淘宝君羊令页是真的吗 编辑:程序博客网 时间:2024/04/26 21:17

算法描述:

输入一个正数s,打印出所有和为s的连续正数序列

算法实现:

/*************************************************************************> File Name: main.c> Author: cyf> Mail: 1097189275@qq.com > Created Time: 2016年03月26日 星期六 13时04分31秒 ************************************************************************/#include "FindContinuousSequence.h"/* * 输入一个正数s,打印出所有和为s的连续正数序列(至少包含两个数) * 例如:15->[1-5],[4-6],[7-8] * */int main(){int sum = 15;FindContinuousSequence(sum);return 0;}


/*************************************************************************> File Name: FindContinuousSequence.h> Author: cyf> Mail: 1097189275@qq.com > Created Time: 2016年03月26日 星期六 13时07分35秒 ************************************************************************/#ifndef FINDCONTINUOUSSEQUENCE_H#define FINDCONTINUOUSSEQUENCE_H#include <stdio.h>#include <stdlib.h>void FindContinuousSequence(int sum);void PrintContious(int start, int end);#endif

CC = gccCFLAGS = -g%.o:%.c$(CC) -o $@ -c $(CFLAGS) $<main:main.o FindContinuousSequence.o$(CC) main.o FindContinuousSequence.o -o main $(CFLAGS)clean:rm -rf *.o main


/*************************************************************************> File Name: FindContinuousSequence.c> Author: cyf> Mail: 1097189275@qq.com > Created Time: 2016年03月26日 星期六 13时07分14秒 ************************************************************************/#include "FindContinuousSequence.h"void FindContinuousSequence(int sum){if(sum < 3)return;int small = 1;int big = 2;int middle = (1+sum)>>1;int curSum = small+big;while(small < middle){if(curSum==sum)PrintContious(small, big);while(curSum >sum && small<middle){curSum -= small;small++;if(curSum==sum)PrintContious(small, big);}big++;curSum += big;}}void PrintContious(int start, int end){int i;for(i=start; i<=end; i++)printf("%d ", i);printf("\n");}


0 0