⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 form1.cs

📁 华为招聘的题目,值得关注.功能不是十分完善,不过大概的都有了.
💻 CS
字号:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace 华为招聘题
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }


        int[] zh(string[] a) //转换函数
        {
            try
            {
                int[] data = new int[a.Length];
                for (int i = 0; i < a.Length; i++)
                {
                    data[i] = int.Parse(a[i]);
                }
                return data;
            }
            catch
            {
                MessageBox.Show("输入的数据格式不正确!");
            }
            return null;
        }

        void px(ref int[] num) //排序函数
        {
            for (int i = 0; i < num.Length - 1; i++)
            {
                for (int j = i + 1; j < num.Length; j++)
                {
                    if (num[i] < num[j])
                    {
                        int temp = num[i];
                        num[i] = num[j];
                        num[j] = temp;
                    }
                }
            }
        }


        void fz(int[] num) //布局函数
        {
            int[] a = new int[num.Length / 2];
            int[] b = new int[a.Length];
            a[0] = num[0];//先初始化第一个和第二个数组的第一个元素
            b[0] = num[1];

            if (a[0] < b[0])
            {
                a[1] = num[2];
                b[1] = num[3];
            }
            else
            {
                a[1] = num[3];
                b[1] = num[2];
            }

            int bn = 0;
            for (int i = 0; i < num.Length/2; i+=2)
            {
                int ah = 0, bh = 0;

                int z;
                if (i == 0) z = i;
                else z = i - 1;
                
                for (int j = 0; j < z + 2; j++)
                {
                    ah = ah + a[j];
                    bh = bh + b[j];
                }
                if ((ah - bh < num[i + 4] - num[i + 5]) && (ah - bh>0))
                {
                    a[bn+2] = num[i + 5];
                    b[bn+2] = num[i + 4];
                    bn++;
                }
                else
                {
                    a[bn+2] = num[i + 4];
                    b[bn+2] = num[i + 5];
                    bn++;
                }
            }
            


            yh(ref a, ref b, c(a, b));
            yh(ref a, ref b, c(a, b));
            yh(ref a, ref b, c(a, b));
            yh(ref a, ref b, c(a, b));

            //输出
            for (int i = 0; i < num.Length/2; i++)
            {
                    lista.Items.Add(a[i]);
                    listb.Items.Add(b[i]);
            }

        }

        int yh(ref int[] a, ref int[] b, int H) //优化
        {
            for (int i = 0; i < H; i++)
            {
                for (int m = 0; m < 5; m++)
                {
                    for (int n = 0; n < 5; n++)
                    {
                        int temp = a[m] - b[n];
                        if (temp < 0)
                        {
                            temp *= -1;
                            int num = (num1(a) + temp) - (num1(b) - temp);
                            if (num < 0) num *= -1;
                            if (num == i) //如果交换之后双方等于i,则成立
                            {
                                int s = a[m];
                                a[m] = b[n];
                                b[n] = s;
                                return i;
                            }

                        }
                        else
                        {
                            int num = (num1(a) - temp) - (num1(b) + temp);
                            if (num < 0) num *= -1;
                            if (num == i) //如果交换之后双方等于i,则成立
                            {
                                int s = a[m];
                                a[m] = b[n];
                                b[n] = s;
                                return i;
                            }
                        }
                        /*
                        if (num1(a) < num1(b) && temp < 0)
                        {
                            
                            if ((num1(a) + temp) - (num1(b) - temp) == i) //如果交换之后双方等于i,则成立
                            {
                                int s = a[m];
                                a[m] = b[n];
                                b[n] = s;
                                return i;
                            }
                        }
                        else if (num1(a) < num1(b) && temp > 0)
                        {
                            continue;
                        }
                        else if (num1(a) > num1(b) && temp > 0)
                        {
                            
                            if ((num1(a) - temp) - (num1(b) + temp) == i) //如果交换之后双方等于i,则成立
                            {
                                int s = a[m];
                                a[m] = b[n];
                                b[n] = s;
                                return i;
                            }
                        }
                        else if(num1(a) > num1(b) && temp < 0)
                        {
                            // temp *= -1;
                            continue;
                        }
                            /*
                            int ss = temp - ((H + 1) / 2);//SS为左右两方需要交换的差
                            if (ss < 0) ss *= -1;

                            if (ss == i)
                            {
                                int s = a[m];
                                a[m] = b[n];
                                b[n] = s;
                                return i;
                            }
                        }*/
                    }
                }

            }

                return H;
            
        }
        int c(int[]a,int[]b) //计算 两数组各自总和,返回差
        {

            int ah=0;
            for(int i=0;i<a.Length;i++)
            {
                ah+=a[i];
            }
            int bh = 0;
            for (int i = 0; i < b.Length; i++)
            {
                bh += b[i];
            }
            int hxxx = ah - bh;
            if (hxxx < 0) hxxx *= -1;
            return hxxx;
        }
        int num1(int[] a)//计算某一数组总和
        {
            int sum = 0;
            for (int i = 0; i < a.Length; i++)
            {
                sum += a[i];
            }
            return sum;
        }

        private void btnok_Click(object sender, EventArgs e)
        {

            lista.Items.Clear();
            listb.Items.Clear();

            string str = txtdata.Text.Trim();
            string[] data = str.Split();
            if (data.Length == 10)
            {
                int[] num = zh(data);
                if (num != null)
                {
                    px(ref num);
                    fz(num);


                    int a = int.Parse(lista.Items[0].ToString()) + int.Parse(lista.Items[1].ToString()) + int.Parse(lista.Items[2].ToString()) + int.Parse(lista.Items[3].ToString()) + int.Parse(lista.Items[4].ToString());
                    int b = int.Parse(listb.Items[0].ToString()) + int.Parse(listb.Items[1].ToString()) + int.Parse(listb.Items[2].ToString()) + int.Parse(listb.Items[3].ToString()) + int.Parse(listb.Items[4].ToString());
                    int c = a - b;
                    if (c < 0)
                    {
                        c *= -1;
                    }
                    txtresult.Text = "a数组总和:" + a.ToString() + ";b数组总和:" + b.ToString() + ";相差:" + c.ToString();
                }
            }
            else MessageBox.Show("目前只支持10个数的运算.");
        }
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -