3 条题解
-
1
非常简单 找规律 ---谨记 一定要动笔-- 举个例子 以下中A表示先添加,A'表示翻转后的结果i = 1 A = 1 A' = 1 i = 2 A = 12 A' = 21 i = 3 A = 213 A' = 312 i = 4 A = 3124 A' = 4213下面这张图片中 我用黄色标注了这个奇数次输入的数绿色表示偶数位的数字。不难发现,如果总反转次数位偶数的时候,那么奇数的数字就会被翻转到后面去而且是按照输入顺序排列的。

者是为甚么呢
考虑在第一次的时候翻转无效,但是第二次(即偶数次)插入的时候会把这个数字翻转到前面去
发现,当奇数位读入之后被插入到最后的时候,最后的末尾数字应该是应该是上上次的数(即上一个奇数次插入的数)所以是顺序的
同理
那么对于在前面半个部分的数,因为翻转这个式子的时候末尾是顺序的,所以转过来的时候就是倒序的。(所以下一次转回去就是正序的)
总节
所以对于所有前面的部分应该都是倒序的,后面的部分都是正序的
下一步
接下来考虑应该是奇数在前面还是偶数在前面。
我们发现,当奇数次读入的时候会把这个所有奇数次的数字反转到前面,所以当n是奇数的时候,奇数就应该在前半部分。
结束了
综上
n为奇数的时候所有奇数次读入的数字应该都以倒序在前面,偶数次读入的数字都用正序的形式在后面
同理反之
```cpp for (int i = 1; i <= n; i++) { if (i % 2 == 0) { cin >> a[++tota]; } else { cin >> b[++totb]; } } if (n % 2 == 0) { for (int i = tota; i >= 1; i--) { cout << a[i] << ' '; } for (int i = 1; i <= totb; i++) { cout << b[i] << ' '; } } else { for (int i = totb; i >= 1; i--) { cout << b[i] << ' '; } for (int i = 1; i <= tota; i++) { cout << a[i] << ' '; } }
信息
- ID
- 2745
- 时间
- 1000ms
- 内存
- 512MiB
- 难度
- 3
- 标签
- (无)
- 递交数
- 33
- 已通过
- 18
- 上传者