定義的整數k的基於正整數的舍入爲n到k的最近倍數。如果n的兩個倍數等距離使用較大者。整數基於舍入問題
的5 4基於舍入爲4,因爲圖5是更接近於4比它是8,
5的基於5舍入爲5,因爲圖5是更靠近5,它是10個,
的6 4基於舍入爲8,因爲圖6是從圖4和8等距離的,所以更大的一個被用於
寫命名doIntegerBasedRounding函數,將一個整數數組和舍入使用n個所有其陽性元素基於整數舍入。 A中的陣列的負元件不被修改並且如果n < = 0時,沒有所述陣列的元素被修改。最後,您可能會認爲 陣列至少有兩個元素。
的問題,我面對了兩起案件
({1, 2, 3, 4, 5},2) and ({-18, 1, 2, 3, 4, 5},4)
我越來越
[0, 2, 2, 4, 4] and [-18, 0, 0, 4, 4, 4]
而不是
{2, 2, 4, 4, 6} and {-18, 0, 4, 4, 4, 4}
這裏是我的代碼
class doIntegerBasedRounding {
public static void main(String[] args) {
System.out.println(Arrays.toString(doIntegerBasedRounding(new int []{1,2,4,5,6,7,8,9,9},5)));
System.out.println(Arrays.toString(doIntegerBasedRounding(new int []{1, 2, 3, 4, 5},2)));
System.out.println(Arrays.toString(doIntegerBasedRounding(new int []{1, 2, 3, 4, 5},3)));
System.out.println(Arrays.toString(doIntegerBasedRounding(new int []{1, 2, 3, 4, 5},-3)));
System.out.println(Arrays.toString(doIntegerBasedRounding(new int []{-1, -2, -3, -4, -5},3)));
System.out.println(Arrays.toString(doIntegerBasedRounding(new int []{-18, 1, 2, 3, 4, 5},4)));
System.out.println(Arrays.toString(doIntegerBasedRounding(new int []{1, 2, 3, 4, 5},5)));
System.out.println(Arrays.toString(doIntegerBasedRounding(new int []{1, 2, 3, 4, 5},100)));
}
public static int[] doIntegerBasedRounding(int[]a, int n){
int temp;
int[] b= new int[a.length];
if(n<0)
return a;
for (int i =0; i<a.length; i++){
if(a[i]<=0){
b[i]=a[i];
}
else if(a[i]>0) {
temp = a[i]%n;
if(temp>n/2) {
b[i] = a[i] + (n - temp);}
if (temp<=n/2){
b[i]= a[i]-temp;
}
}
}
return b;
}
}
你應該切換您的條件,首先是'temp> = n/2'和第二個'temp
garnulf
@ garnu如果我試着這樣做。它糾正了上述數組的結果,但改變了其他兩個數組(第3和第6)的結果。而不是** {0,3,3,3,6}和{0,0,5,5,5} **,我得到了** [3,3,6,6]和[0,5 ,5,5,5] ** – roooseon
您需要另外除以2.0否則3/2結果爲1不是1.5 – garnulf