* 问题:
小易有一个长度为n的整数序列,a_1,...,a_n。然后考虑在一个空序列b上进行n次以下操作:
1、将a_i放入b序列的末尾
2、逆置b序列
小易需要你计算输出操作n次之后的b序列。
输入描述:
输入包括两行,第一行包括一个整数n(2 ≤ n ≤ 2*10^5),即序列的长度。
第二行包括n个整数a_i(1 ≤ a_i ≤ 10^9),即序列a中的每个整数,以空格分割。
输出描述:
在一行中输出操作n次之后的b序列,以空格分割,行末无空格。
输入例子1:
4
1 2 3 4
输出例子1:
4 2 1 3
* 思路:
* 序列a:0 1 2 3 4 5 6 7 8 9 长度为10
* 序列b的变化过程:
* 一、 0
* 二、 1 0
* 三、 2 0 1
* 四、 3 1 0 2
* 五、 4 2 0 1 3
* 六、 5 3 1 0 2 4
* 七、 6 4 2 0 1 3 5
* 八、 7 5 3 1 0 2 4 6
* 九、 8 6 4 2 0 1 3 5 7
* 十、 9 7 5 3 1 0 2 4 6 8
*
* 很明显,若经过奇数次的变化,a序列的偶数序号是以递减的顺序排在b序列的左侧,a序列的奇数序号是以递增的顺序排列在b序列的右侧。
* 反之,若经过偶数次的变化,a序列的奇数数序号是以递减的顺序排在b序列的左侧,a序列的偶数序号是以递增的顺序排列在b序列的右侧。
* 只需要将偶数序号和奇数序号分开生各成一个数组,按照递减或递增的规律先后输出即可。
JAVA程序:
public class OperationSequence {
public static void main(String[] args) {
int[] oddArr;
int[] evenArr;
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
if(n%2==0){
oddArr=new int[n/2];
evenArr=new int[n/2];
for (int i = 0; i < n; i++) {
int sub=i/2;
if(i%2==0){
evenArr[sub]=scanner.nextInt();
}else{
oddArr[sub]=scanner.nextInt();
}
}
for (int i = oddArr.length-1; i >=0; i--) {
System.out.print(oddArr[i]+" ");
}
for (int i = 0; i < evenArr.length-1; i++) {
System.out.print(evenArr[i]+" ");
}
System.out.println(evenArr[evenArr.length-1]);
}else{
oddArr=new int[n/2];
evenArr=new int[n/2+1];
for (int i = 0; i < n; i++) {
int sub=i/2;
if(i%2==0){
evenArr[sub]=scanner.nextInt();
}else{
oddArr[sub]=scanner.nextInt();
}
}
for (int i = evenArr.length-1; i >=0; i--) {
System.out.print(evenArr[i]+" ");
}
for (int i = 0; i < oddArr.length-1; i++) {
System.out.print(oddArr[i]+" ");
}
System.out.println(oddArr[oddArr.length-1]);
}
}
}