首页 > 编程语言 > 详细

求连续正整数的和-Java

时间:2020-07-03 12:01:09      阅读:69      评论:0      收藏:0      [点我收藏+]

算法训练  连续正整数的和   
时间限制:1.0s     内存限制:256.0MB
     
问题描述
  78这个数可以表示为连续正整数的和,1+2+3,18+19+20+21,25+26+27。
  输入一个正整数  n(< =10000)
  输出  m  行(n有m种表示法),每行是两个正整数a,b,表示a+(a+1)+...+b=n。
  对于多种表示法,a小的方案先输出。
样例输入
78
样例输出
1  12
18  21
25  27

---------

设n=78;

通常的想法是1+2==n?,不是

      1+2+3==n?,不是

      1+2+3+4==?,不是

      .......直到78/2,结束;

那么100000呢?数越大就越耗时间;

而换成数组,往每i位==1~i的和,把这些数先填好,再遍历数组中a[i]-ar[i+1]位的差是否等于n即可,等于就输出i,j;

public static void main(String[] args) {
        Scanner in=new Scanner(System.in);
        int num=in.nextInt();
        int ar[]=new int[num+1];
        for(int i=1;i<=num;i++) {
            ar[i]=ar[i-1]+i;
        }
        for(int j=0;j<num-1;j++) {
            for(int k=j+1;k<=num;k++) {
                if(ar[k]-ar[j]==num) {
                    System.out.println((j+1) + " " + k);
                }else if(ar[k]-ar[j]>num) {
                    break;
                }
            }
        }
    }

 

求连续正整数的和-Java

原文:https://www.cnblogs.com/RorinL/p/13229150.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!