分步进行数组的求和

package shuzu;
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Scanner;
public class Test {
    public static void main(String[] args) throws IOException {
        Scanner sc = new Scanner(System.in);
        try{
            FileWriter fw =new FileWriter("text.txt");
        
        for(int i=0;i<200;i++) {
            long x=(long)(Math.random()*200)*(Math.random()>0.5?1:-1);
            String y=""+x;
            fw.write(y);
            fw.write("\r\n");
           // System.out.println(y);
        }
        fw.close();}
        catch(FileNotFoundException e){
            e.printStackTrace();
        }

        ArrayList<String> arrList = new ArrayList<>();
        try {
            FileReader fr = new FileReader("text.txt");
            BufferedReader bf = new BufferedReader(fr);
            String st;
            while ((st = bf.readLine()) != null) {
                arrList.add(st);
            }
            bf.close();
            fr.close();
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    long a[] = new long[arrList.size()];
    for (int i = 0; i <arrList.size(); i++) {
        
        String s=arrList.get(i);
        a[i] = (long) Double.parseDouble(s);
        }
    
    long max=a[0];
    long sum=a[0];
    
    System.out.println("1.执行 2.按步执行");
    int m=sc.nextInt(); 
    switch(m) {
    case 1:{
        for(int i=1;i<a.length;i++) {
            if(sum<0)
                sum=a[i];
            else 
                sum+=a[i];
            if(sum>max)    max=sum;
            System.out.print("子数组和最大值为"+max);
            System.out.println("到第"+(i+1)+"位");  
            System.out.println();
        }
        System.out.println("最大子数组和:"+max);
        }break;
    case 2:
    {
        for(int i=1;i<=a.length;i++) {
            if(sum<0)
                sum=a[i];
            else 
                sum+=a[i];
            if(sum>max)    max=sum;
            System.out.print("当前子数组和最大值为"+max);
            System.out.println("当前检查到第"+i+"位");
            System.out.println();
            System.out.println("1.继续2.回上一步");
            int n = sc.nextInt();  
            switch(n) {
            case 1:break;
            case 2:{
                 long max1=a[0];
                 long sum1=a[0];
                System.out.println("输入位数");
                int j=sc.nextInt();
                for(int k=1;k<=j;k++) {
                    if(sum1<0)
                        sum1=a[k];
                    else 
                        sum1+=a[k];
                    if(sum1>max1)    max1=sum1;
            }
                System.out.print("子数组和最大值为"+max1);
                System.out.println("当前检查到第"+j+"位");
            }break;
        }
        }System.out.println("最大子数组和:"+max);
    }
   }
  }
}

  思路为在文档获取数组后,按之前的方法进行子数组的和运算,按老师的要求是要加一个步骤的分布展示,将子数组的加和加入一个i,用来定位此时运算在哪里,这样就能一步一步的显示运算步骤。

问题:这个一步一步的展示真的想不明白,在网上寻求思路代码才加和上去。

自己要把数组求和这一类问题好好的总结一下,争取弄明白其中的思路问题,尤其是那个步骤的分部。

转载于:https://www.cnblogs.com/jhl1234/p/11043811.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值