1 条题解

  • 0
    @ 2025-8-24 22:20:19

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar 冰糖鸽子
    还不是能说晚安的时候哦。

    搬运于2025-08-24 22:20:19,当前版本为作者最后更新于2020-05-05 00:38:58,作者可能在搬运后再次修改,您可在原文处查看最新版

    自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多

    以下是正文


    随便一看前几篇题解,居然都是没有 next_permutationnext\_permutation 函数,或者用了也很难懂得,于是就准备先写一篇试试, ACAC 了。

    先介绍一下 next_permutationnext\_permutation

    随便写的小模版 :: next_permutation(a,a+i)next\_permutation(a,a+i)

    • a :: 起始位置.

    • a + i :: 结束位置.

    这个函数就是将数组 aa 的起始位置到结束位置的所有 数字 (注意,这里的数字是以每个数组元素为单位,也就是说如果 aa 里有一个元素是 1111 ,那 1111 会被当做一个整体来排列) 排序成当前排列的下一个全排列。

    还有要注意的一点,如果当前排列已经是最后一个全排列了,那它会将数组排列成第一个全排列并返回 falsefalse. (没错,它是有返回值的,但如果直接写一行那就不用管返回值了)

    好,看到现在你应该已经知道怎么写了,最后一个点就是将数输入到数组里,有一种办法是一个一个字符输入并转换,但这样比较麻烦,所以我们采用了先输入一整个字符串再分别转换的方法。

    注释代码如下(认真看注释哦):

    #include <bits/stdc++.h>
    using namespace std;
    //next_permutation(a,a + 3)模板,不会打可直接复制
    int main()
    {
       string a;//定义
       cin >> a;//输入整个字符串
       int al = a.length();//al = A Length的首字母
       int num[al];//存储每位数字
       for(int i = 0;i < al;i++)//循环辅值
       {
           num[i] = a[i] - '0';//不需要记'0'的ASCII码,写'0'就行
       } 
       if(next_permutation(num,num + al))//关键的哦,这个函数是可以将num数组的变成下一个全排列,如果这个排列已经是最后那就返回false,反之亦然
       {
           for(int i = 0;i < al;i++)//循环输出
           {
               cout << num[i];//输出数字,记得不要加空格
           }
           return 0;//直接结束程序,可少打一层else
       }
       cout << '0';//如果是最后一个了(对应题目中的"若这样的数不存在"),那就输出0
       return 0;//结束
    }
    

    最后附上无注释的::

    #include <bits/stdc++.h>
    using namespace std;
    int main()
    {
        string a;
        cin >> a;
        int al = a.length();
        int num[al];
        for(int i = 0;i < al;i++)
        {
            num[i] = a[i] - '0';
        } 
        if(next_permutation(num,num + al))
        {
            for(int i = 0;i < al;i++)
            {
                cout << num[i];   
            }
            return 0;
        }
        cout << '0';
        return 0;
    }
    

    本人码风不压行带空格,写的时候看着清晰

    看在我这么努力写题解的份上,给个赞再走呗 QWQQWQ

    • 1

    信息

    ID
    3892
    时间
    1000ms
    内存
    32MiB
    难度
    2
    标签
    递交数
    0
    已通过
    0
    上传者