一、爱丽丝的人偶
题目解析
现在存在
n个玩偶,每个玩偶的身高是1、2、3......n;现在我们要对这些玩偶进行排序(如果 x 人偶,它左右两边的玩偶一个比 x 高、一个比 x 矮,那这个玩偶就会爆炸)。
我们不想要任何一个人偶爆炸,题目输入一个
n,让我们返回满足条件的排列。
算法思路
这道题的核心是让 i 人偶比 i-1 和 i+1 位置的人偶高或者低。
我们可以这样去排列:1, n , 2 , n-1 , 3 , n-2......
这样我们可以发现,任何一个位置,它都是比左右两个人偶高或者低的。
那这道题我们就可以从 1 和 n 开始放置人偶,所以只需要定义两个变量分别从 1 和 n 开始向中间遍历。
注意: 当我们放置完
l人偶后,l是可能等于r;如果我们不做判断,那就可能放置两个身高一样的人偶:
1 3 2 2。所以我们要进行判断,如果放置完
l的人偶后,让l++,再判断l是否小于等于r:(如果l<=r就放置r,否则就不放置)。
这里我们也没有必要将数据存储起来,直接输出即可。
代码实现
#include <iostream>
using namespace std;
int main(){
int n; cin >> n;
int l = 1, r = n;
while(l <= r){
cout << l << ' '; l++;
if(l <= r){
cout << r << ' '; r--;
}
}
cout << endl;
return 0;
}


