日期:2014-05-18 浏览次数:20998 次
private void button1_Click(object sender, EventArgs e)
{
Hashtable temp = new Hashtable();
int[] init_Array = new int[] { 3, -2, 1, 1, -2, 4 };
int j = 0;
for (int i = 0; i < init_Array.Length; i++)
{
j = init_Array[i] + j;
p_point p = temp[j] == null ? new p_point() : p = (p_point)temp[j];
p.setNewIndex(i);
temp[j] = p;
}
string res_str = String.Empty;
foreach (var item in temp.Values)
{
string str = "索引{0}-索引{1}的连续和为0 \n";
var t = (p_point)item;
var list = t.tempobj;
for (int i = 0; i < list.Count - 1; i++)
{
for (int jj = i + 1; jj < list.Count; jj++)
{
//判定两点间没有数据以及所有点都在一条直线上
if ( CheckIsNotLine(list[i].pot_index, list[jj].pot_index,init_Array))
{
res_str += String.Format(str, list[i].pot_index + 1, list[jj].pot_index);
}
}
}
}
MessageBox.Show(res_str);
}
private bool CheckIsNotLine(int start,int end,int[] array)
{
return ! (array.Skip(start - 1).Take(end - start).Sum() == 2 * array[start]);
}
class resobj
{
public int pot_index { get; set; }
}
class p_point
{
public p_point()
{
tempobj = new List<resobj>();
}
public List<resobj> tempobj { get; set; }
public void setNewIndex(int index)
{
tempobj.Add(new resobj() { pot_index = index });
}
}
}