将一个正整数分解为多个连续整数之和

来源:互联网 发布:mac pdf怎么删除文字 编辑:程序博客网 时间:2024/04/29 18: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 <stdio.h>
int main(void)
{
    int n;
    scanf("%d", &n);// 输入要分解的n
    for(int n1=1; n1<=n/2; n1++)// n1为最开头的数
    {
        for(int n2=n1+1; n2<n; n2++)// n2为最末尾的数
        {
            if((n1+n2)*(n2-n1+1) == n*2)// 用等差数列公式算和
            {
                //如果相等就输出结果
                for(int t=n1; t<=n2; t++)
                {
                    printf("%d,", t);
                }
                printf("\n");
            }
        }
    }
    return 0;
}

 

本文出自:http://blog.sina.com.cn/s/blog_4978528d010097mb.html

原创粉丝点击