| 
题目描述:
×
你还没有登录,登录后可以看到更多精彩内容您需要 登录 才可以下载或查看,没有账号?新成员注册  一个正整数有可能可以被表示为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秒 编辑过 |