百度之星程序设计大赛试题
第一题(共四题100分):连续正整数(10分)
题目描述:一个正整数有可能可以被表示为n(n>=2)个连续正整数之和,如:
15=1+2+3+4+5
15=4+5+6
15=7+8
请编写程序,根据输入的任何一个正整数,找出符合这种要求的所有连续正整数序列
。 输入数据:一个正整数,以命令行参数的形式提供给程序。 输出数据:在标准输
出上打印出符合题目描述的全部正整数序列,每行一个序列,每个序列都从该序列的最小
正整数开始、以从小到大的顺序打印。如果结果有多个序列,按各序列的最小正整数的大
小从小到大打印各序列。此外,序列不允许重复,序列内的整数用一个空格分隔。如果没
有符合要求的序列,输出“NONE”。
例如,对于15,其输出结果是:
1 2 3 4 5
4 5 6
7 8
对于16,其输出结果是: NONE
算法实现:
#include <iostream>
int main()
{
int i,j,k,n,data,tsum;
n=0; //存储整数能分解成多少组整数连加
printf("输入一个整数:");
scanf("%d",&data);
for(i=1;i<data;i++)
{
tsum=0; //存储当前的和
for(j=i;j<data;j++)
{
tsum+=j;
if(tsum==data)
{
n++;
for(k=i;k<=j;k++) //输出分解出的整数
printf("%d/t",k);
printf("/n");
break; //加入一个break语句能减少算法的执行时间,不加也可以
}
}
}
if(n==0) //如果一组都不能分解
printf("NONE/n");
}