题解 | 小红的不动点构造

小红的不动点构造

https://www.nowcoder.com/practice/c075b59aed8e4becaa8a0d6f9715d80e

//头文件,也可以使用万能头
#include <iostream>
#include <vector>

//主程序
int main() {
    int n = 0, k = 0;
    std::cin >> n >> k;

    if (n - k == 1) {
        std::cout << -1 << std::endl;   //这时候,已经没有符合了,该-1了.jpg
        return 0;
    }

    std::vector<int> a(n);  //长度为n的动态数组
    for (int i = 0; i < n; i++) a[i] = i + 1;   //如果下标是0,那么值为1,没办法,vector是从0开始的,哎

    int m = n - k;  //那么m就该为随机排序的数量了,也就是随机排列数量 = 全部数量 - 不动数量
    if (m > 0) {
        int first = a[k];  //先把要随机的第一个值保存一下
        for (int i = k; i < n - 1; i++) a[i] = a[i + 1];    //然后把要随机排列的值全部+1,这样就对应不了下标了捏,但最后一个会失去
        a[n - 1] = first;   //你猜我为什么要保存第一个要随机排列的值?
    }

    for (const auto& val : a) std::cout << val << " ";
  
    std::cout << std::endl;

    return 0;
}

全部评论

相关推荐

双尔:反手回一个很抱歉,经过慎重考虑,您与我的预期暂不匹配,感谢您的投递
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

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