题目
思路
- 这道题第一个点在于将每个情况考虑清楚,不漏掉每一种情况
- 第二点就在于调用Arrays 自带的排序算法,它会将默认数组的"0"值也作为数组的一员进行排序,导致错误,所有应该将数组默认值的那一部分截取掉,从而方便排序
- 第三点就是输入一个数组和一个整数的问题:想要输入一个数组,就得包装两次,再想输入一个整数,则需要另起一个Scanner
代码
package day5;
import java.util.Arrays;
import java.util.Scanner;
public class day5 {
public static void main(String[] args) {
int[] arr = new int[100];
int i=0;
Scanner scanner = new Scanner(System.in);
String s = scanner.nextLine();
Scanner reader=new Scanner(s);
while(reader.hasNextInt()) {
arr[i] = reader.nextInt();
i++;
}
int[] a=new int[i];
for(int m=0;m<i;m++){
a[m]=arr[m];
}
Scanner sc = new Scanner(System.in);
int k =sc.nextInt();
int sum = largestSum(a, k);
System.out.println(sum);
}
public static int largestSum(int[] arr, int k) {
int sum = 0;
int count = 0;
Arrays.sort(arr);
if (arr[0] > 0) {
while(k>0){
arr[0] = -arr[0];
k--;
}
} else {
for (int j = 0; j < arr.length; j++) {
if (arr[j] < 0 && count < k) {
arr[j] = -arr[j];
count++;
} else if (arr[j] == 0 && count < k) {
break;
} else if (arr[j] > 0 && count < k) {
if (arr[j] > arr[j - 1]) {
arr[j - 1] = arr[j - 1] * (int) Math.pow(-1, k - count);
} else {
arr[j] = arr[j] * (int) Math.pow(-1, k - count);
break;
}
}
}
}
for(int j : arr) {
sum += j;
}
return sum;
}
}