思路:从第二个开始,选择每一个可能的数,计算它前面的数(不包括自己)的和是否等于 (总和-这个数)/2 List ok(int[] a) { int sum=0; List list=new Arraylist(); for(i=0;i<a.length;i++) { sum+=a[i]; } if(sum%2==1) { return null; } else { for(i=1;i<a.length;i++) { int temp=0; for(j=0;j<i-1;j++) { temp+=a[j]; } if(temp==(sum-a[i])/2) { list.add(new Integer(a[i])); } } return list; }
更正:代码最后少了个} List ok(int[] a) { int sum=0; List list=new Arraylist(); for(i=0;i<a.length;i++) { sum+=a[i]; } if(sum%2==1) { return null; } else { for(i=1;i<a.length;i++) { int temp=0; for(j=0;j<i-1;j++) { temp+=a[j]; } if(temp==(sum-a[i])/2) { list.add(new Integer(a[i])); } } return list; } }
对了,如果长度为0也包括的话应该是 List ok(int[] a) { int sum=0; List list=new Arraylist(); for(i=0;i<a.length;i++) { sum+=a[i]; } if(sum%2==1) { return null; } else { for(i=0;i<a.length;i++) { int temp=0; for(j=0;j<i-1;j++) { temp+=a[j]; } if(temp==(sum-a[i])/2) { list.add(new Integer(a[i])); } } return list; } }
import java.util.Vector; import java.awt.Point; import java.util.Enumeration;public class csdn_01 { public csdn_01() { } public Vector ok(int [] n) { Vector v = new Vector();
int sum = 0; int sub = 0; int i = 0;
for(i=0;i<n.length;i++) { sum += n[i]; }
sub = n[0]; for(i=1;i<n.length-1;i++) { if(sub*2==sum-n[i]) { v.add(new Point(i,n[i])); } sub += n[i]; } return v;
}
public static void main(String [] args) { Vector v = new csdn_01().ok(new int[]{1,0,0,0,0,1}); Enumeration e = v.elements(); Point p = null; while(e.hasMoreElements()) { p = (Point)e.nextElement(); System.out.println(p.x+","+p.y); } } }
明白你的意思了
最笨的做法是从0到i个数字先循环,然后比较数字左边的和右边依次向后循环的和值有没有相等一旦右边大于左边则i++,等于就记录第i个数字,小于则继续
sumL=0;
for(i=0;i<a.length;i++)
sum+=a[i];
for(i=0;i<a.length;i++)
if(sum==sumL) return Point(i,i+1);
else sumL+=a[i];return null;==============
要多点的话就在上一个return那里用数组存起来吧!
=================
sum=0;
sumL=0;
for(i=0;i<a.length;i++)
sum+=a[i];
if(sum%2==1) return null;
for(i=0;i<a.length;i++)
if(sum/2==sumL) return Point(i,i+1);
else sumL+=a[i];return null;
sumL=0;
for(i=0;i<a.length;i++)
sum+=a[i];
if(sum%2==1) return null;
else{
for(i=0;i<a.length;i++)
if(sum/2==sumL) list.put(new Point(i,i+1));
else sumL+=a[i];
}
if(list.length()>0) return list;
else return null;
(总和-这个数)/2
List ok(int[] a)
{
int sum=0;
List list=new Arraylist();
for(i=0;i<a.length;i++)
{
sum+=a[i];
}
if(sum%2==1)
{
return null;
}
else
{
for(i=1;i<a.length;i++)
{
int temp=0;
for(j=0;j<i-1;j++)
{
temp+=a[j];
}
if(temp==(sum-a[i])/2)
{
list.add(new Integer(a[i]));
}
}
return list;
}
List ok(int[] a)
{
int sum=0;
List list=new Arraylist();
for(i=0;i<a.length;i++)
{
sum+=a[i];
}
if(sum%2==1)
{
return null;
}
else
{
for(i=1;i<a.length;i++)
{
int temp=0;
for(j=0;j<i-1;j++)
{
temp+=a[j];
}
if(temp==(sum-a[i])/2)
{
list.add(new Integer(a[i]));
}
}
return list;
}
}
List ok(int[] a)
{
int sum=0;
List list=new Arraylist();
for(i=0;i<a.length;i++)
{
sum+=a[i];
}
if(sum%2==1)
{
return null;
}
else
{
for(i=0;i<a.length;i++)
{
int temp=0;
for(j=0;j<i-1;j++)
{
temp+=a[j];
}
if(temp==(sum-a[i])/2)
{
list.add(new Integer(a[i]));
}
}
return list;
}
}
import java.awt.Point;
import java.util.Enumeration;public class csdn_01 {
public csdn_01() {
}
public Vector ok(int [] n)
{
Vector v = new Vector();
int sum = 0;
int sub = 0;
int i = 0;
for(i=0;i<n.length;i++)
{
sum += n[i];
}
sub = n[0];
for(i=1;i<n.length-1;i++)
{
if(sub*2==sum-n[i])
{
v.add(new Point(i,n[i]));
}
sub += n[i];
}
return v;
}
public static void main(String [] args)
{
Vector v = new csdn_01().ok(new int[]{1,0,0,0,0,1});
Enumeration e = v.elements();
Point p = null;
while(e.hasMoreElements())
{
p = (Point)e.nextElement();
System.out.println(p.x+","+p.y);
}
}
}