1 条题解
-
0
自动搬运
来自洛谷,原作者为

冰糖鸽子
还不是能说晚安的时候哦。搬运于
2025-08-24 22:20:19,当前版本为作者最后更新于2020-05-05 00:38:58,作者可能在搬运后再次修改,您可在原文处查看最新版自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多
以下是正文
随便一看前几篇题解,居然都是没有 函数,或者用了也很难懂得,于是就准备先写一篇试试, 了。
先介绍一下
随便写的小模版
-
a 起始位置.
-
a + i 结束位置.
这个函数就是将数组 的起始位置到结束位置的所有 数字 (注意,这里的数字是以每个数组元素为单位,也就是说如果 里有一个元素是 ,那 会被当做一个整体来排列) 排序成当前排列的下一个全排列。
还有要注意的一点,如果当前排列已经是最后一个全排列了,那它会将数组排列成第一个全排列并返回 . (没错,它是有返回值的,但如果直接写一行那就不用管返回值了)
好,看到现在你应该已经知道怎么写了,最后一个点就是将数输入到数组里,有一种办法是一个一个字符输入并转换,但这样比较麻烦,所以我们采用了先输入一整个字符串再分别转换的方法。
注释代码如下(认真看注释哦):
#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; }本人码风不压行带空格,写的时候看着清晰
看在我这么努力写题解的份上,给个赞再走呗
-
- 1
信息
- ID
- 3892
- 时间
- 1000ms
- 内存
- 32MiB
- 难度
- 2
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者