1. 程式人生 > >求一個有一千個元素的整數數組的最大子數組的和

求一個有一千個元素的整數數組的最大子數組的和

好的 .text gen new text sys system class mes

小組成員:司宇,滕達。

設計界面:

在c#界面添加一些控件。

程序設計: 1.使用for循環和取隨機數的函數產生一千個隨機數並且將其賦值到數組中;

2.封裝獲取最大子數組和的子函數;

3.設計主函數調用封裝好的子函數;

4.將最大子數組和在textbox中顯示出來;

調試和運行程序:

技術分享圖片

遇到的問題:1.沒辦法隨意設定隨機數的範圍;

2.主函數需要的數值類型和子函數定義的數值類型不一致;

3.調試的時候進行一次調試以後就無法進行第二次調試;

解決方案:1.給隨機數的上下限分別用兩個可變量來定義,並且通過外界TextBox來進行輸入;

2.主函數中的數組定義的是double類型,子函數定義的是int類型,在調用子函數之前將數組的類型轉化為int類型;

3.設計一個清屏鍵,每次調試完以後,使用這個鍵清除文本,方便進行第二次調試;

幾次運行的結果:

技術分享圖片

源程序:

using System;
using System.Collections.Generic;
using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace _1000個數字的整數組的最大子數數組和 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } //求一個整數數組任意的連續子數組的最大和
public int Sum(int[] a) { if (null == a) { return 0; } //判斷數組是否為空,如果是空的話,令返回值為0 if (a.Length == 1) { return a[0]; } //判斷數組裏面是否只有一個元素,是,則返回此元素 int sum = a[0]; int temp; for (int i = 0; i < a.Length - 1; i++) { temp = a[i]; //開始從a[i]往它之後遍歷,從a[i]開始累加,逐一跟sum對比 for (int j = i + 1; j < a.Length; j++) { temp = temp + a[j]; if (sum < temp) { sum = temp; //得出最大的一個Sum值,並且返回Sum } } } return sum; } private void button1_Click(object sender, EventArgs e) { Random random = new Random(); double min, max; min = Convert.ToDouble (textBox2.Text); max = Convert.ToDouble (textBox3.Text); int[] a = new int[1000]; for (int i = 0; i < 1000; i++) { a[i] = random.Next((int)min, (int)max); richTextBox1.AppendText(Convert.ToString(a[i])+" "); } int sum=Sum (a); //調用定義的封裝好的子程序求和 textBox1.Text = Convert.ToString(sum); } private void textBox3_TextChanged(object sender, EventArgs e) { } private void textBox2_TextChanged(object sender, EventArgs e) { } private void button2_Click(object sender, EventArgs e) { richTextBox1.Text=""; textBox1.Text = ""; } private void button3_Click(object sender, EventArgs e) { } private void textBox1_TextChanged(object sender, EventArgs e) { } } }

求一個有一千個元素的整數數組的最大子數組的和