zoukankan      html  css  js  c++  java
  • 结对开发四--首尾相连得数组的最大子数组的和

    一、设计思路

      根据上一个结对开发的基础上,将数组的首尾可以连接起来,组成一个首尾相联的数组,也就是说,每一个元素都能当作是数组的第一个元素,

    因此,就可以根据有几个元素,就定义几个数组,让每一个元素都能成为元素的第一个元素,来得出每一个数组的最大子数组的和,那么怎么构造

    每一个数组呢?

      可以用冒泡交换,就是根据冒泡排序的原理,将数组的最后一个元素转移到数组的第一个元素的位置,然后就得到了目标数组,算出最大值。

    二、源代码

     1 import java.util.*;
     2 public class SuperMax
     3 {
     4     public static int Exchange(int arr[],int n)
     5     {
     6         int t;
     7         
     8         for(int j=0;j<n-1;j++)
     9         {
    10             t=arr[j];
    11             arr[j]=arr[j+1];
    12             arr[j+1]=t;
    13         }
    14         
    15         return 0;
    16     }
    17     public static void main(String[] args)
    18     {            
    19         Scanner sc=new Scanner(System.in);
    20         int[] list = new int[10];//输入数组是必须先定义数组,否则出错!
    21         int[] arr1 = new int[10];//输入数组是必须先定义数组,否则出错!
    22         int[] arr = new int[10];//输入数组是必须先定义数组,否则出错!
    23         System.out.println("请输入数组:");
    24         for(int k=0;k<10;k++)
    25         {
    26             list[k]=sc.nextInt();
    27         }
    28         
    29         for(int i=0;i<10;i++)
    30         {
    31             Exchange(list,9);
    32             for(int n=0;n<9;n++)
    33             {
    34                 //Exchange(list,9);
    35                 arr1[n]=list[n];
    36                 for(int m=n;m<9;m++)
    37                 {
    38                     arr1[m+1]=arr1[m]+list[m+1];
    39                 }
    40                 for(int m=n;m<10;m++)
    41                 {
    42                     if(arr1[m]>arr1[n])
    43                     {
    44                         arr1[n]=arr1[m];
    45                     }        
    46                 }
    47                 
    48             }
    49             arr1[9]=list[9];    
    50             for(int l=0;l<10;l++)
    51             {
    52                 if(arr1[l]>arr1[0])
    53                 {
    54                     arr1[0]=arr1[l];
    55                 }    
    56             }
    57             arr[i]=arr1[0];
    58             System.out.println("第"+(i+1)+"个数组的最大子数组的和为"+arr1[0]);
    59         }    
    60         for(int i=0;i<10;i++)
    61         {
    62             if(arr[i]>arr[0])
    63             {
    64                 arr[0]=arr[i];
    65             }    
    66         }
    67         System.out.println("最终最大子数组的和为"+arr[0]);
    68     }
    69 }

    三、运行截图

    四、心得体会

      这次实验实际上就是对上次的实验做了次升级,主要思想就是怎么构造这个首尾相联的数组,在思考的过程中,和队友都有自己的方法,并将其都进行了实验,最后决定用“冒泡交换”的方法,将其实现,如果想到更好的方法,还会对其做出改进。

    五、有图为证

  • 相关阅读:
    IOS学习计划
    IOS学习计划
    Android 多线程注意事项
    Android BroadcastReceiver 的简单实现
    新书《iOS编程(第6版)》抢鲜试读
    Apple Watch 2.0 数据通讯
    iOS 9 新特性
    Apple Watch 1.0 开发介绍 2.1 WatchKit Apps UI要点
    Apple Watch 1.0 开发介绍 1.4 简介 使用iOS技术
    Apple Watch 1.0 开发介绍 1.3 简介 WatchKit App 架构
  • 原文地址:https://www.cnblogs.com/KevinBin/p/4378771.html
Copyright © 2011-2022 走看看