privatevoid button1_Click(object sender, EventArgs e)
{
#region 初始化数组int[] array =newint[arrayLength];
Random random =new Random(1000); // 固定随机种子,使大家测试数据一致for (int i =0; i < array.Length; i++)
array[i] = random.Next(arrayLength *10);
#endregion 初始化数组int A, B, C;
long tickCount = Environment.TickCount;
Search(array, out A, out B, out C);
Console.WriteLine("计算结果:A={0} B={1} C={2},耗时:{3}",
A, B, C, Environment.TickCount - tickCount);
}
publicvoid Search(int[] array, outint A, outint B, outint C)
{
A =-1;
B =-1;
C =-1;
/* TODO : 自由发挥 */
}
publicvoid Search(int[] array, outint A, outint B, outint C)
{
A =-1;
B =-1;
C =-1;
int[] all =newint[arrayLength *10];
for (int i =0; i < array.Length; i++)
all[array[i]]++;
for (int j = all.Length-1; j >0; j--)
{
if (all[j] ==0) continue;
int num = j;
int halfnum=num/2;
if (num %2==0)
{
if (all[halfnum] >=2)
{
A = B = halfnum;
C = j;
return;
}
}
for (int t =1; t < halfnum; t++)
{
if (all[t] >0&& all[num - t] >0)
{
A = t;
B = num - t;
C = num ;
return;
}
}
}
publicvoid Search(int[] array, outint A, outint B, outint C)
{
Array.Sort(array);
for (int i = array.Length -1; i >=2; i--)
{
C = array[i];
for (int j = i -1; j >=1; j--)
{
B = array[j];
A = C - array[j];
int k = Array.IndexOf(array, A, 0, j -1);
if (k >=0) return;
}
}
A =-1;
B =-1;
C =-1;
}