求一个有一千个元素的整数数组的最大子数组的和
Posted 七越
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了求一个有一千个元素的整数数组的最大子数组的和相关的知识,希望对你有一定的参考价值。
小组成员:司宇,滕达。
设计过程:
设计界面:
在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) { } } }
以上是关于求一个有一千个元素的整数数组的最大子数组的和的主要内容,如果未能解决你的问题,请参考以下文章