Chinaunix首页 | 论坛 | 博客
  • 博客访问: 4730109
  • 博文数量: 930
  • 博客积分: 12070
  • 博客等级: 上将
  • 技术积分: 11448
  • 用 户 组: 普通用户
  • 注册时间: 2008-08-15 16:57
文章分类

全部博文(930)

文章存档

2011年(60)

2010年(220)

2009年(371)

2008年(279)

分类: C/C++

2008-11-04 21:43:33


题目描述:一个正整数有可能可以被表示为 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 <stdio.h>
#include <stdlib.h>
#define N 20

int main()
{
    int flags=0;
    int count=0;
    int i;
    int j;
    int k;;
    int sum=0;
    int end=0;
    for(i=1;i<N;i++)
    {
        //printf("This time i is %d\n",i);


        sum += i;
        for(j=i+1;j<N && sum<N;j++)
        {
            sum += j;
            if(sum == N)
            {
                end=j;
                break;
            }//else if(sum > n)


                
        }
        //printf("sum >n\n");


        sum = 0;
        if((end==0)) continue;
            else
        {
            count=i;
            for(k=0;k<=end-i;k++)
            {printf("%d ",count++);}
            flags=1;
            printf("\n");
       }
        end=0;sum=0;
        
    
    }
    if (flags==0)
            printf("NONE\n");
return 0;

}

阅读(3943) | 评论(4) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2010-04-10 09:20:22

对的,测试了

ubuntuer2009-08-30 09:50:16

还有blog里的东西只要不是转载的,我贴的code都是我运行正确之后的... 在你那里不对?怎么不对?环境?error code帖上,不要就丢个不对...

ubuntuer2009-08-30 09:48:27

我自己是跑过了的,是对的!!!! 这题是N久之前写的了,看这个 printf("Please input x:"); scanf("%d", &x); for(n = 2; n * n < x * 2; ++ n){ int a = (2 * x / n - n + 1) / 2; /*下面这句也许从数学角度来说是恒等式,这就是程序的妙处^_^,跑一下你就知道了*/ if( n * a + n * (n - 1) / 2 == x){ for(i = 0; i < n; ++i) printf("%d ", a + i); printf("\n"); exist = 1; } } if(!exist) printf("none\n");

chinaunix网友2009-08-30 09:14:23

不对吧,自己上机试一下,N=15都不对