网易2017内推笔试题-逆置整数序列

来源:互联网 发布:淘宝网淘宝网淘宝网 编辑:程序博客网 时间:2024/05/16 20:29

1、小易有一个长度为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序列,以空格分割,行末无空格。

例:

输入:n = 4

1 2 3 4

输出:4 2 1 3

分析:这个题我当时笔的时候的思路就是,直接进行n次翻转,可以运行过去,但是测试用例过去了50%,没有完全通过。然后下来之后,自己想了想,这种题还是有明显的规律的。

1、当n为偶数时,翻转后的序列---》先为偶数递减排列,然后为奇数递增排列;

2、当n为奇数时,翻转后的序列---》先为奇数递减排列,然后为偶数递增排列;

代码实现:

int main(){int n;int i;cin >> n;int* arr = new int[n];for (i = 0; i < n; i++)cin >> arr[i];if (n % 2 == 0){for (i = n - 1; i>0; i = i - 2){cout << arr[i] << " ";}cout << arr[0];for (i = 2; i < n-1; i = i + 2){cout << " "<<arr[i];}}else{for (i = n - 1; i>0; i = i - 2){cout << arr[i] << " ";}cout << arr[0];for (i = 1; i < n - 1; i += 2){cout << " "<<arr[i];}}return 0;}