分析:
这道题需要构建一个具体要求的数组(具体看下面)
1.前一半数组是偶数
2.后一半数组是奇数
3.所有的数组都各不相同,并且都是整数
4.前一半的和等于后一半的和
首先要先判断“YES”or“NO”,可以通过给的例子,在4、8时为“YES”其他情况为“NO”,可以猜出来可能是4的倍数,咱们现在想:当为n==4时是奇数和等于偶数和的,当n==6时,加了一个奇数在奇数数组中,又加了一个偶数在偶数数组中,肯定是不相等的。因此就肯定了必须是4的倍数。
其次根据上述结论,接下来需要找到偶数和等于奇数和规律,只要找到这个关系就可以把这道题给解出来。
咱们先写出部分数组
偶数数组[2,4,6,8] ,奇数数组[1,3,5,7]。这个数组长度为8,可以通过计算,前面的和比后面 的和多了4;
[2,4,6,8,10,12] ,[1,3,5,7,9,11]。数组长度为12,可以通过计算,前面的和比后面的和多6;
通过再多写计组例子,可得出结论,奇数数组比偶数数组少n/2,只需要在奇数数组最后+n/2即可;
因此通过上述分析,就可以写出代码了
Java代码:
import java.util.Scanner;
public class BalancedArray {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while (sc.hasNext()) {
int t = sc.nextInt();
// 有t组数据,每组数据运行一次
while (t-- > 0) {
int n = sc.nextInt();
if (n % 4 == 0) { //当是4的倍数时,开始打印
System.out.println("YES");
int even = 2; //偶数初始值为2
int odd = 1; //奇数初始值为1
for (int i = 0; i < n / 2; i++) {
System.out.print(even + " ");
even += 2;//每次加2
}
for (int i = 0; i < n / 2; i++) {
if (i == (n / 2) - 1) {//当为最后一个数时,加n/2
System.out.print(odd + n / 2);
} else {
System.out.print(odd + " ");
odd += 2;//每次加2
}
}
System.out.println();
} else { //当不是4的倍数时,直接输出NO
System.out.println("NO");
}
}
}
}
}



