Chinaunix首页 | 论坛 | 博客
  • 博客访问: 204719
  • 博文数量: 75
  • 博客积分: 2049
  • 博客等级: 大尉
  • 技术积分: 780
  • 用 户 组: 普通用户
  • 注册时间: 2009-04-08 12:37
文章分类

全部博文(75)

文章存档

2011年(1)

2010年(9)

2009年(65)

我的朋友

分类: LINUX

2009-07-11 15:53:26


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


#!/usr/bin/perl

##########################

# by sleetdrop

# sleetdrop@gmail.com

##########################

print "Please input the number:";
chomp($number = <STDIN>);
for($i=2; $i<$number; $i++)
{
   for($j=1; $j<$number; $j++)
   {
           if(($i*$j+$i*($i-1)/2)==$number)
           {


           for $x ($j..($j+$i-1))
           {
               push @tmp, $x;
            }

           push (@result, [@tmp]);
           @tmp = ();
            }

    }
}
print "The result is here:\n";
if(@result)
{
       while(@result)
       {
               $outword=pop(@result);
               print "@$outword";
               print "\n";
        }
}
else
{
       print "NULL";
}

阅读(1274) | 评论(0) | 转发(0) |
0

上一篇:tomcat与apache集成

下一篇:切换IP地址(perl)

给主人留下些什么吧!~~