package 数组3个数为0;public class Test {
public static void main(String[] args) {
int [] a={-5,2,1,14,6,-3};
int x=-1;
for(int i=0;i<a.length;i++){
int q=a[i];
x=i;
x++;
System.out.println("q="+q);
for(int j=x;j<a.length;j++){
System.out.println("第二层"+a[j]);
int w=q+a[j];
System.out.println("w="+w);
x++;
for(int k=x;k<a.length;k++){
System.out.println("第三层"+a[k]);
int e=w+a[k];
System.out.println("e="+e);
if(e==0){
System.out.println("成功"+e);
System.exit(0);
}
}
}
}
}
}
自己写的太复杂了。。
public static void main(String[] args) {
int [] a={-5,2,1,14,6,-3};
int x=-1;
for(int i=0;i<a.length;i++){
int q=a[i];
x=i;
x++;
System.out.println("q="+q);
for(int j=x;j<a.length;j++){
System.out.println("第二层"+a[j]);
int w=q+a[j];
System.out.println("w="+w);
x++;
for(int k=x;k<a.length;k++){
System.out.println("第三层"+a[k]);
int e=w+a[k];
System.out.println("e="+e);
if(e==0){
System.out.println("成功"+e);
System.exit(0);
}
}
}
}
}
}
自己写的太复杂了。。
解决方案 »
- 不懂怎么出错了。
- java如何捕捉1394的数据流
- 求一个可以匹配空值的正则表达式
- 两个new Thread(r1 ).start()后输出的判定
- HIBERNATE配置文件中,如何使用sql语句
- 人要死了,jni调用问题 ^^^^^^^^^^^^^^^^^^^^^^,在线等!!
- 寻找java相关的开源书籍或网址
- 给自己找条后路,想学Java,大家能否根据我的基础介绍基本好书?来者有分!
- 怎么设置菜单条的背景颜色呀?和窗口大小的控制问题!(在线等)一句代码10分
- JBuilder8企业正式版可以下载了!
- JDOM socket连接自动关闭?
- 有什么java程序可以根据一个xml生成java代码
public class TestMain {
public static void main(String[] args) {
int[] arr = { -5, 2, 1, 14, 6, -3 };
int sum= 0; //要求的和
calculate(sum,arr);
} public static void calculate(int sum,int[] arr) {
int count = 0;
for (int i = 0; i <arr.length; i++) {
for (int j = i+1; j <arr.length; j++) {
for (int k = j+1; k <arr.length; k++) {
if (arr[i] + arr[j] + arr[k] == sum) {
count++;
System.out.println("第"+count+"组:"+arr[i]+"+"+arr[j]+"+"+arr[k]+"="+sum);
}
}
}
}
}
}
* the times target occur in <code>int[] ints</code>
*
* @param ints
* @param target
* @return
*/
public static int count(int[] ints, int target) {
int count = 0;
for (int i = 0; i < ints.length; i++) {
if (ints[i] == target) {
count++;
}
}
return count;
}
public void main (String [] args) {
int[] arr = {2,4,5,0,-4,-2};
check (arr, -1, 1, 0);
}void check (int[] arr, int index, int level, int sum) {
if (level > MAX_LEVEL) return; for (int i = index + 1; i < arr.length; i++) {
if (level == MAX_LEVEL) {
if (sum + arr[i] == 0) {
System.out.println("oh yeah!");
exit(0);
}
}
else {
check (arr, i, level + 1, sum + arr[i]);
}
}
}
然后还是依次遍历,不过当找到等于0的后,就可以跳过剩余的数,继续下一个循环了。
比如当-3+1+2=0后,就不用再计算-3+1+6了 因为后面的肯定都会比0大。
就可以进行下一个循环-3+2+6>0,又可以跳过后面剩余的数了。
// 借用了2L的代码,按上面的思路小小的修改了下
// main里面加个Arrays.sort(a); 然后忽略了排序后有重复数据的情况。
public static void calculate(int sum,int[] arr) {
int count = 0;
for (int i = 0; i <arr.length; i++) {
if(arr[i]>=0) break;
for (int j = i+1; j <arr.length; j++) {
if(arr[i]+arr[j]>=0){
break;
}
for (int k = j+1; k <arr.length; k++) {
if (arr[i] + arr[j] + arr[k] == sum) {
count++;
System.out.println("第"+count+"组:"+arr[i]+"+"+arr[j]+"+"+arr[k]+"="+sum);
break;
}
}
}
}
}
不过可能会很复杂。我想到了那个可怕的kmp算法。