笔试时间:2023年3月4日 春招  第一题  题目:平滑值  小红定义一个数组的平滑值为:任意两个相邻元素的差的绝对值的最大值。例如:数组[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      参考题解  C++:[此代码未进行大量数据的测试,仅供参考]  #include <iostream>#include <vector>using namespace std;int main() {    int n, k;    cin >> n >> k;    vector<int> arr = {k + 1};    for (int i = 1; i <= k; i++) {        arr.push_back(i);    }    for (int j = k + 2; j <= n; j++) {        arr.push_back(j);    }    for (int i : arr) {        cout << i << " ";    }        return 0;}  Java:[此代码未进行大量数据的测试,仅供参考]  import java.util.Scanner;import java.util.ArrayList;public class Main {    public static void main(String[] args) {        Scanner sc = new Scanner(System.in);        int n = sc.nextInt();        int k = sc.nextInt();        ArrayList<Integer> arr = new ArrayList<>();        arr.add(k + 1);        for (int i = 1; i <= k; i++) {            arr.add(i);        }        for (int j = k + 2; j <= n; j++) {            arr.add(j);        }        for (int i : arr) {            System.out.print(i + " ");        }    }}  第二题  题目:p的倍数  小红拿到了一个正整数n,她可以进行若干次操作,每次操作将选择一个数位,使其加1或者减1。不过有两条限制:  1、每个数位最多只能操作一次。  2、如果选择的是9,则无法进行加1操作。如果选择的是0,则无法进行减1操作。  小红希望最终n成为p的倍数,你能帮小红输出操作结束后的整数n吗?  输入描述  两个正整数n和p。  1≤n,p≤10^13  输出描述  如果误解,请输出-1。假设有多解的时候,输出任意解即可。(如果操作包含前导零,请将前导零一起输出)  参考题解  C++:[此代码未进行大量数据的测试,仅供参考]  #include <iostream>#include <vector>#include <string>using namespace std;int n, p;vector<int> arr;int ans = -1;void dfs(int cur, int index) {    if 
点赞 9
评论 8
全部评论

相关推荐

求offer的大角牛:不吃香菜
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务