一道题

  题目描述:一个正整数有可能可以被表示为n(n>=2)个连续正整数之和,如:

  15=1+2+3+4+5

  15=4+5+6 

  15=7+8


  请编写程序,根据输入的任何一个正整数,找出符合这种要求的所有连续正整数序列。

  输入数据:一个正整数,以命令行参数的形式提供给程序。

  输出数据:在标准输出上打印出符合题目描述的全部正整数序列,每行一个序列,每个序列都从该序列的最小正整数开始、以从小到大的顺序打印。如果结果有多个序列,按各序列的最小正整数的大小从小到大打印各序列。此外,序列不允许重复,序列内的整数用一个空格分隔。如果没有符合要求的序列,输出“NONE”。

不注释了,自己看吧,很简单的

#include <stdio.h>
#include <stdlib.h>
 
#define false 0
#define true 1
 
typedef unsigned int uint_t;
typedef int bool;
 
 
int main(int argc, char* argv[])
{
	uint_t nNum = 0;
	uint_t nHalf = 0; 
	uint_t nStep = 1;
	uint_t i, j;
	uint_t nTotal = 0;
	bool b = false;
 
	printf("请输入任意正整数:");
	scanf("%u", &nNum);
	printf("您输入的数字为:%d", nNum);
	fflush(stdin);
	nHalf = nNum / 2;
	if (nNum % 2 != 0)
		++nHalf;
 
	while (nStep <= nHalf) 
	{
		nTotal = 0;
		for (i = nStep; i <= nHalf; ++i) 
		{
			nTotal += i;
			if (nTotal == nNum) 
			{
				b = true;
				printf("/n算式:%d", nStep);
				for (j = nStep + 1; j <= i; ++j)
					printf(" + %d", j);
				printf(" = %d", nNum);
				break;
			}
		}
		++nStep;
	}
	if (b == false)
		printf("/nNONE");
 
	printf("/n按任意键结束.....");
	getc(stdin);
	return 0;
}


你可能感兴趣的:(一道题)