zoukankan      html  css  js  c++  java
  • 返回一个循环数组的最大子数组以及最大子数组和

      设计界面:

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

    运行结果:

                     

                    

  • 相关阅读:
    剑指Offer-49.把字符串转换成整数(C++/Java)
    codeforces Gym 100338H High Speed Trains (递推,高精度)
    codeforces Gym 100338E Numbers (贪心,实现)
    codeforces Gym 100338C Important Roads (重建最短路图)
    HDU 4347 The Closest M Points (kdTree)
    UVA 10817
    HDU 4348 I
    HDU 4341 Gold miner (分组背包)
    UVA 1218
    UVA 1220 Party at Hali-Bula (树形DP)
  • 原文地址:https://www.cnblogs.com/qiyuea/p/9905078.html
Copyright © 2011-2022 走看看