java做運算後最接近值

5 13 21 30 35

1 2 3 4 5

Update:

Update 2:

Rating
• 7 years ago

/// pile.java

import java.util.Arrays;

public class pile {

private int[] pileInt;

private boolean[] pileTake;

public pile (int[] s){

pileInt = Arrays.copyOf(s, s.length);

pileTake= new boolean[s.length];

for(int i=pileTake.length-1; i>=0; --i) pileTake[i]=false;

return;

}

public pile (int s) {

pileInt = new int[s];

pileTake= new boolean[s];

for(int i=pileTake.length-1; i>=0; --i) pileTake[i]=false;

return;

}

public boolean next(){

for(int i=pileTake.length-1; i>=0; --i) {

if (pileTake[i]){

pileTake[i] = false;

} else {

pileTake[i] = true;

return true;

}

}

return false;

}

public int value(){

int sum, i;

for(sum=0, i=pileInt.length-1; 0 <= i; --i) sum += pileInt[i];

return sum;

}

public int value(boolean st){

int sum, i;

for(sum=0, i=pileInt.length-1; 0 <= i; --i) if(st == pileTake[i]) sum += pileInt[i];

return sum;

}

public int[] getList(boolean st){

int cnt=0,

i,j ;

for(boolean x:pileTake) if(st == x) ++cnt;

int[] ret = new int[cnt];

for(j=i=0; j < cnt;++i) if(st == pileTake[i]) ret[j++] = pileInt[i];

return ret;

}

}/// main.java

public class doPile {

public static void main(String[] args){

int[] dat = {13, 5, 17, 10, 21, 35, 30},best1= {},best2 = {};

int mn, tot;

pile p = new pile(dat);

tot = p.value();

System.out.printf("Total value of the pile = %d, %d/%d\n",

tot, p.value(false), p.value(true));

for(mn = tot; 0 < mn && p.next(); ){

int v0 = p.value(false),

v1 = tot - v0 ,

df = (v0>v1)?(v0-v1):(v1-v0);

if (mn > df) {

mn = df;

best1 = p.getList(true);

best2 = p.getList(false);

}

}

System.out.printf("Smallest diff between the piles = %d\n", mn);

for(int x:best1) System.out.printf("%d ", x);

System.out.printf("and the other pile is ");

for(int x:best2) System.out.printf("%d ", x);

return;

}

}

• ccc
Lv 6
7 years ago

方法都大同小異,下個範例就是了.

public class Test1 {

static int [] n=new int[10]; //5個數字宣告10要素陣列

private static int mm; //計算總和用

private static int min=9999; //比大小用

private static String ans=""; //結果字串用

public static void main(String[] args) {

n[0]=5;

n[1]=13;

n[2]=21;

n[3]=30;

n[4]=35;

for(int i=0;i<5;i++) n[i+5]=-n[i]; //做出5個數字的負數

//==== 以下共 5 維迴圈(5個數字)

for (int i1=0;i1<10;i1+=5)

for (int i2=1;i2<10;i2+=5)

for (int i3=2;i3<10;i3+=5)

for (int i4=3;i4<10;i4+=5)

for (int i5=4;i5<10;i5+=5){

mm=n[i1]+n[i2]+n[i3]+n[i4]+n[i5]; //5個數字相加(也有可能加負數)

if (Math.abs(mm)<min){ //比絕對值大小

min=Math.abs(mm);

ans=min+"=("+n[i1]+")+("+n[i2]+")+("+n[i3]+")+("+n[i4]+")+("+n[i5]+")";

}

}

System.out.println(ans); //印出結果

}

}

Source(s): 自己
• 7 years ago

想要做完運算的結果最接近零的就用排序

至於要做怎樣的運算的話,五個數的話有四個運算子,只用加減法的話那從

0000-1111都做一次(0表示減法1表示加法)

• 7 years ago

是可以做到你說的那樣

只是有點不懂你的問題

看不懂描述

5 13 21 30 35

差距最接近0的是2 答案就是2

這什麼意思啊？？

你的五個數字應該放在陣列或List裡面

然後跑回圈去計算你要做的事

如果 你要找最接近0的 那用排序就好啦 呵呵