📄 form1.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 + -