码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2018-10-14 17:45:19      阅读:196      评论:0      收藏:0      [点我收藏+]

标签:控件   添加   void   []   str   调用   click   程序设计   .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)

        {

 

        }

    }

}

 

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

标签:控件   添加   void   []   str   调用   click   程序设计   .com   

原文地址:https://www.cnblogs.com/tengda123/p/9786868.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!