返回一个循环数组的最大子数组以及最大子数组和

  设计界面:

程序设计: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)
        {

        }
    }
}

运行结果:

                 

                

猜你喜欢

转载自www.cnblogs.com/qiyuea/p/9905078.html