设计界面:
程序设计:1.封装一个求循环整数组最大子数组和的子程序;
2.设计一个主函数,主函数可以调用子函数;
3.在主函数中添加代码,使主函数可以输出想要的结果。
遇到的问题:1.在调用求循环整数组的最大子程序时,如何将一个整数组变成一个循环整数组并且赋值给子函数;
2.设计循环子数组的时候,如何使子数组的长度不大于原数组的长度,并且还能够得到预想的结果;
3.如何同时将子数组的和和子数组本身同时返回给主函数。
解决方案: 1.定义一个新数组,其长度为原数组长度的二倍-1,将原数组依次赋值给新数组长度相同的部分,超出的部分从头开始再次将原数组赋值进去,直到新数组全部有值为止。
2. for (int i = 0; i < (a.Length+1)/2; i++)
{
temp = a[i]; //开始从a[i]往它之后遍历,从a[i]开始累加,逐一跟sum对比
b = Convert.ToString(a[i]);
if (sum < temp)
{
sum = temp; //得出最大的一个Sum值,并且返回Sum
c = b;
}
for (int j = i + 1; j-i < (a.Length+1)/2-1; j++)
{
temp = temp + a[j];
b = b + "+" + Convert.ToString(a[j]);
if (sum < temp)
{
sum = temp; //得出最大的一个Sum值,并且返回Sum
c = b;
}
};
3.将最大子数组的和与它本身一并赋值给一个String类型的值,并且返回这个值
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 string Sum(int[] a) { if (null == a) { return "0"; } //判断数组是否为空,如果是空的话,令返回值为0 if (a.Length == 1) { return "a[0]"; } //判断数组里面是否只有一个元素,是,则返回此元素 int sum = a[0]; string b = null; string c = b; int temp; for (int i = 0; i < (a.Length+1)/2; i++) { temp = a[i]; //开始从a[i]往它之后遍历,从a[i]开始累加,逐一跟sum对比 b = Convert.ToString(a[i]); if (sum < temp) { sum = temp; //得出最大的一个Sum值,并且返回Sum c = b; } for (int j = i + 1; j-i < (a.Length+1)/2-1; j++) { temp = temp + a[j]; b = b + "+" + Convert.ToString(a[j]); if (sum < temp) { sum = temp; //得出最大的一个Sum值,并且返回Sum c = b; } } } string d = Convert.ToString(sum) +" "+ "最大子数组为" + c; return d; } 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])+" "); } string sum=Sum (a); //调用定义的封装好的子程序求和 textBox1.Text = 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) { string[] b = richTextBox1.Text.Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries); int[] list = new int[b.Length]; int[] list1 = new int[b.Length*2-1]; for (int i = 0; i < b.Length; i++) { list[i] = int.Parse(b[i]); list1[i] = list[i]; } for (int i = 0; i < b.Length-1; i++) { list1[i + b.Length] = list[i]; } textBox1.Text = Convert.ToString(b.Length); string sum = Sum(list1); textBox1.Text = Convert.ToString(sum); } private void textBox1_TextChanged(object sender, EventArgs e) { } private void richTextBox1_TextChanged(object sender, EventArgs e) { } } }
运行结果:
。