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;
}