程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA綜合教程 >> 課堂練習(返回一個整數數組中最大子數組的和),整數數組

課堂練習(返回一個整數數組中最大子數組的和),整數數組

編輯:JAVA綜合教程

課堂練習(返回一個整數數組中最大子數組的和),整數數組


1.設計思想

  只用一個主函數即可完成。

  首先,定義一個整型數組,讓用戶輸入一組整數。

  然後,判斷這一組數的正負還有零的情況。

  最後,根據判斷出來的情況進行選擇執行 if 語句,情況分別為全為0,負數和0,正數和0還有正數負數和0。

2.源代碼

1 /* 2 * For the maximum of the subarray of an integer array 3 * The start time 2016/4/8 16:50 4 * The end of time 2016/4/8 18:30 5 * Author Jing 6 */ 7 package arraymax; 8 import java.util.*; 9 public class SumArray { 10 11 public static void main(String[] args) { 12 13 Scanner sca=new Scanner(System.in); 14 System.out.println("輸入整數數組數的個數"); 15 int num=sca.nextInt(); 16 17 int a[]=new int[num],b[]=new int[num]; 18 int i; 19 System.out.println("輸入此組整數數組"); 20 for(i=0;i<num;i++) 21 { 22 a[i]=sca.nextInt(); 23 } 24 int l=0,j=0,k=0,sum=0,max; 25 for(i=0;i<num;i++)//判斷輸入數組的正負情況 26 { 27 if(a[i]>=0) 28 { 29 j++; 30 } 31 if(a[i]<0) 32 { 33 k++; 34 } 35 if(a[i]==0) 36 { 37 l++; 38 } 39 } 40 if(k==num)//全為負數 41 { 42 max=a[0]; 43 for(i=1;i<num;i++) 44 { 45 if(max<a[i]) 46 { 47 max=a[i]; 48 } 49 } 50 System.out.println("最大子數組和為 "+max); 51 } 52 else if((l+k)==num)//只有負數和0 53 { 54 System.out.println("最大子數組和為 0"); 55 } 56 else if(j==num)//全為非負數 57 { 58 for(i=0;i<num;i++) 59 { 60 sum+=a[i]; 61 } 62 System.out.println("最大子數組和為 "+sum); 63 } 64 else 65 { 66 for(i=0;i<num-1;i++) 67 { 68 if(a[i]>=0&&a[i+1]>=0) 69 { 70 a[i+1]=a[i]+a[i+1]; 71 a[i]=0; 72 } 73 if(a[i]<0&&a[i+1]<0) 74 { 75 a[i+1]=a[i]+a[i+1]; 76 a[i]=0; 77 } 78 } 79 k=0; 80 j=0; 81 while(k<num)//循環完成後b[]中只有正負數 82 { 83 if(a[k]!=0) 84 { 85 b[j]=a[k]; 86 j++; 87 } 88 k++; 89 } 90 if(b[0]<0) //尋找第一個正數的下標 91 { 92 i=1; 93 } 94 else 95 { 96 i=0; 97 } 98 while(i<j-2)//只有正數和負數時進行計算 99 { 100 if(b[i]>(-b[i+1]) && (-b[i+1])<b[i+2]) 101 { 102 b[i+2]=b[i]+b[i+1]+b[i+2]; 103 b[i]=0; 104 b[i+1]=0; 105 i=i+2; 106 } 107 else 108 { 109 i=i+2; 110 } 111 } 112 max=b[0]; 113 for(i=1;i<j;i++) 114 { 115 if(max<b[i]) 116 { 117 max=b[i]; 118 } 119 } 120 System.out.println("最大子數組和為 "+max); 121 } 122 } 123 } The Main Code

3.結果截圖

4.編程總結

  由於時間問題,此程序編的有些倉促,還有很多不足之處,以及需要優化的地方。在空余時間裡,我再繼續思考,爭取編出一個最起碼自己滿意的程序。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved