一个正整数表示为n(n>=2)个连续正整数之和!

 

今天下午无意中看到这个题目:

  题目描述:一个正整数有可能可以被表示为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 


刚开始毫无思路,遂百度之(发现居然是百度的一道编程题),无奈网上的程序都比较麻烦,实在看不懂而且也看不下去(主要是因为本人水平太菜快哭了),还好有了点思路,于是动手写之。无奈刚写完时怎么运行都不对,苦思冥想也木想出个所以然,遂去吃饭。吃完饭回来后又把sumj挨个输出检查到底什么地方出错了,终于在一番输出测试后发现问题出现在第二个for语句中的<=上面,把<=改成<运行之,结果运行结果正确,嘿嘿大笑!然后又加了一个flag标志,最后运行验证,程序正确。程序如下,欢迎大家批评指正,请轻拍!大笑

          注:想把文章放在新建的分类里,所以之前删除了,现在重发,请见谅!
#include<stdio.h>
void main()
{
int i,j,k,sum,n,flag=0;
scanf("%d",&n);
for(i=1;i<=(n+1)/2;i++)
{
sum=0;
for(j=i;sum<n;j++)
 sum+=j;
 j--;
/*printf("%d,%d\n",j,sum);*/
if(sum==n)
{printf("%d=",n);
for(k=i;k<j;k++)
printf("%d+",k);
printf("%d\n",k);
flag=1;
}
}
if(!flag)
printf("NONE\n");
}


版权声明:本文为zhizunwudi原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。