你还没有登录,登录后可以看到更多精彩内容
您需要 登录 才可以下载或查看,没有账号?新成员注册
×
题目描述:
一个正整数有可能可以被表示为n(n>=2)个连续正整数之和,如:
15=1+2+3+4+5
15=4+5+6
15=7+8
请编写程序(要求用C或C++),根据输入的任何一个正整数,找出符合这种要求的所有连续正整数序列。
输入数据:一个正整数,以命令行参数的形式提供给程序。
输出数据:在标准输出上打印出符合题目描述的全部正整数序列,每行一个序列,每个序列都从该序列的最小正整数开始、以从小到大的顺序打印。如果结果有多个序列,按各序列的最小正整数的大小从小到大打印各序列。此外,序列不允许重复,序列内的整数用一个空格分隔。如果没有符合要求的序列,输出“none”。
例如,对于15,其输出结果是:
1 2 3 4 5
4 5 6
7 8
对于16,其输出结果是:
none
评分标准:
程序输出结果是否正确。
第一个给出可以正常运行的源代码者,本人转3个会币(代扣手续费1会币)给他。有效期至2007年12月7日24:23:59
本次有奖答题到此结束了,彭金平是本次活动的得主,但由于最的输出的结果与要求“按各序列的最小正整数的大小从小到大打印各序列”不符(反过来了),因此扣一个会币,因此本人将转4个会币给彭金平,同时给出本人的原代码给大家参考比较。请大家期待下次活动。
C原代码:
#include <stdio.h>
int main()
{
int i, j, k;
int Number;
int sum = 0;
int count = 0; //记数器
int isHave = 0; //是否存在连续整数,初始化为没有 相当于false
printf(" lease enter your Number: ");
scanf("%d", &Number);
//对可能的连继整数进行测试
for(i = 1; i<=(Number / 2 + 1); i++)
{
//每进行一次测试结束都把连续整和与计数器清零
sum = 0;
count = 0;
//测试方法
for(j = i; j <= (Number / 2 + 1); j++)
{
sum += j;
count++;
//符合条件
if(sum == Number)
{
isHave = 1; //设置状态 存在连续整数的和 相当于true
//按从小到大输出连续整数
for(k = i; k<(i + count); k++)
printf("%d ", k);
printf("
");
break; //退出本次测试断续进行下一次测试
}
//不符合条件
if(sum > Number)
break;
}
}
//如果不存在连续整数输出none
if( isHave)
printf("none");
getch();
return 0;
}
本贴已被 作者 于 2007年12月08日 12时27分26秒 编辑过 |