zoukankan      html  css  js  c++  java
  • 关于返回一个整数数组中最大子数组的和的问题(续02)

    增添的新要求:

      1、一维数组变为收尾相连的循环数组。

      (其他要求与上篇博客一致)

    设原本的数组为:

    0 -1 -2 -3 5

    变为循环数组后,0与5相连,但是最大子数组的长度一定小于等于数组长度5,所以将除最后一个数外的数,存放到最后一个数后面,

    变化后的数组:

    0 -1 -2 -3 5 0 -1 -2 -3

    按照续01的要求,添加上最大子数组的长度不能大于原数组长度的判断条件,就可求出结果

    package about_bank_account;
    
    import java.io.BufferedReader;
    import java.io.File;
    import java.io.FileReader;
    import java.io.IOException;
    import java.math.BigInteger;
    
    public class Test {
        
        @SuppressWarnings("resource")
        public static void main (String[] args) throws IOException{
            String line = null;
            String snum[] = new String[100];
            String sp[] = null;
            File file = new File("Number.txt"); 
            BufferedReader br = new BufferedReader(new FileReader(file));
            int temp = 0;
            int k = 0;
            int i = 0;
            BigInteger big[] = new BigInteger[100];
            BigInteger bigrmax = new BigInteger("0");
            BigInteger bigmax = new BigInteger("0");
            int jianceshu = 0;
            
            
            
            //读文件    
            while((line=br.readLine())!=null) {
                sp = line.split(" ");//按空格进行分割
                for(i=0;i<sp.length;i++){                    
                    snum[temp] = sp[i];
                    temp++;                
                }
            }
            
            
            
            //检测文件中异常
            try { 
                for(i = 0; i<snum.length; i++) {//转化为大数
                    if(snum[i] != null) {
                        big[i] = new BigInteger(snum[i]);        
                        //System.out.println(big[i]);
                    }
                }
            } 
            catch(NumberFormatException e) { 
                System.out.println("文件中存在异常字符!"); 
                jianceshu = 1;            
            } 
            
            
            
            //若无异常,执行
            if(jianceshu == 0) {
                i = 0;
                while(big[i] != null) {
                    k++;
                    i++;
                }
                
                
                
                //向后添加
                int ii = 0;
                int kk = k+k;            
                for(i = k; i<kk; i++) {
                    big[i] = big[ii];
                    ii++;
                }
                
                
                
                //求子数组最大值
                BigInteger b0=new BigInteger("0");
                bigrmax = big[0];
                int geshu = 0;
                for(i = 0; i<kk; i++) {
                    if((bigmax.compareTo(b0) < 0) || bigmax.equals(b0)){
                        bigmax = big[i];
                        //System.out.println("+++"+bigmax);//记录
                    }else {                    
                        bigmax = bigmax.add(big[i]);
                        geshu++;
                        //System.out.println("///"+bigmax);//记录                    
                    }
                    if((bigrmax.compareTo(bigmax) < 0)&&(geshu < k)) {
                        bigrmax = bigmax;
                        //System.out.println("---"+bigrmax);//记录
                    }
                }
                System.out.println("结果:"+bigrmax);
            }
            
            
            
        }    
    }
  • 相关阅读:
    【Android SDK Manager】SDk国内镜像下载地址
    DS博客作业02--线性表
    C语言博客作业06--结构体&文件
    C语言博客作业05--指针
    C语言博客作业04--数组
    函数
    循环结构
    C语言顺序结构和分支结构总结
    第0次作业
    TypeError: chart_js__WEBPACK_IMPORTED_MODULE_0__.default is not a constructor
  • 原文地址:https://www.cnblogs.com/leity/p/10589579.html
Copyright © 2011-2022 走看看