加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

几个算法问题---将一个正整数分解为多个连续整数之和

(2008-04-03 13:32:52)
标签:

it

 

第四题 整数分解

题目描述:

一个正整数有可能可以被表示为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;
}

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有