第一题:平滑值
题目
小红定义一个数组的平滑值为:任意两个相邻元素的差的绝对值的最大值。例如:数组[2,4,3,3]的平滑值为|2-4|=2。小红希望你构造一个长度为n的排列,满足排列的平滑值等于k。你能帮帮她吗? 排列是指:长度为n的数组,1到n每个正整数都恰好出现1次。
输入描述
第一行输入两个正整数,分别表示n和k。
其中,1≤k<n≤10^5
输出描述
输出n个数字,用空格隔开。输入 4 2 输出 1 3 2 4
思路
脑筋急转弯
#include<iostream>
using namespace std;
int main(){
int n;//长度
int k;//平滑值
cin >> n >> k;
int arr[10001];
arr[0] = n - k + 1;
int count = 1;
for(int i = 1;i < n;i ++){
if(count == n - k + 1){
arr[i] = count;
count ++;
}
arr[i] = count;
count ++;
}
for(int i = 0;i < n-1;i ++){
cout << arr[i] << ' ';
}
cout << arr[n-1] << endl;
return 0;
}
输入n与k
比如n是5
第一步;写出1-n的顺序排列:1 2 3 4 5
假如k是2
第二步,把倒数第k个数拎到前面,把倒数第二个数拎到前面,就是4 1 2 3 5