题目描述
有一个长为 N 的正整数序列 �=(�1,…,��)A=(A1,…,AN),其中任何相邻的两项都不同。
我们要通过下述过程往序列里插入一些数。
1. 若 ��Ai 中相邻两项之差的绝对值都是 11,结束。
2. 令 ��,��+1Ai,Ai+1 为�A 中第一对相邻且差的绝对不是 11 的两项。
若 ��<��+1Ai<Ai+1, 把 ��+1,��+2,…,��+1−1Ai+1,Ai+2,…,Ai+1−1 加到 ��Ai 和 ��+1Ai+1 之间。
若 ��>��+1Ai>Ai+1,把 ��−1,��−2,…,��+1+1Ai−1,Ai−2,…,Ai+1+1 加到 ��Ai 和 ��+1Ai+1 之间。
3. 回到第一步。
输出这个过程结束时的序列 �A。
限制
2≤�≤1002≤N≤100
1≤��≤1001≤Ai≤100
��Ai 不等于 ��+1Ai+1
输入的值都是整数。
输入
�N
�1A1 �2A2 …… ��AN
输出
输出最终的序列 �A。
样例输入
4
2 5 1 2
样例输出
2 3 4 5 4 3 2 1 2
思路
a[ i ]到a[ i + 1 ]有几个数就循环几次,让a[ i ] + j或a[ i ] - j。
代码
#include<bits/stdc++.h>
using namespace std;
int main(){
int n;
cin>>n;
int a[n];
for(int i=0;i<n;i++){
cin>>a[i];
}
for(int i=0;i<n;i++){
cout<<a[i]<<' ';
if(a[i+1]>a[i]&&i+1<n){
for(int j=1;j<a[i+1]-a[i];j++){
cout<<a[i]+j<<' ';
}
}else if(a[i+1]<a[i]&i+1<n){
for(int j=1;j<a[i]-a[i+1];j++){
cout<<a[i]-j<<' ';
}
}
}
return 0;
}