求一个有一千个元素的整数数组的最大子数组的和

小组成员:司宇,滕达。

设计界面:

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

     

程序设计: 1.使用for循环和取随机数的函数产生一千个随机数并且将其赋值到数组中;

                   2.封装获取最大子数组和的子函数;

                   3.设计主函数调用封装好的子函数;

                   4.将最大子数组和在textbox中显示出来;

调试和运行程序:

                 

扫描二维码关注公众号,回复: 3564080 查看本文章

遇到的问题: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)
        {

        }
    }
}

猜你喜欢

转载自www.cnblogs.com/qiyuea/p/9783681.html
今日推荐