题解 P6387 【[COCI2007-2008#4] VECI】
随便一看前几篇题解,居然都是没有
先介绍一下
随便写的小模版
-
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;
}
本人码风不压行带空格,写的时候看着清晰
看在我这么努力写题解的份上,给个赞再走呗