首页 > 其他 > 详细

洛谷 P1088 火星人

时间:2020-04-25 12:08:18      阅读:63      评论:0      收藏:0      [点我收藏+]

技术分享图片

  这个题其实就是一个求全排列的问题,全排列的话在 algorithm 库里有一个非常好用的函数——next_permutation。

  先介绍一下这个函数怎么用:

 1 #include<iostream>
 2 #include<algorithm>
 3 using namespace std;
 4 int a[3]={1,2,3};
 5 int main()
 6 {
 7     do
 8     {
 9         cout<<a[0]<<" "<<a[1]<<" "<<a[2]<<endl;
10     }
11     while(next_permutation(a,a+3));
12     return 0;
13 }

  运行结果:

技术分享图片

  这段代码就是求1,2,3全排列的,如果将while里的 next_permutation(a,a+3) 改为 next_permutation(a,a+2) :

技术分享图片

 

  可以看出:改后,只是对数组的前两个数进行了排列,所以:next_permutation(a,a+n)  就是对 a 数组的前 n 个数进行排列,并且是按由小到大的顺序进行排列,同时也会更新数组。

 这个题也就可以转化为 求所给的 n 个数的后 m 个排列是什么。

  代码:

 1 #include<iostream>
 2 #include<algorithm>// 函数必须的头文件
 3 using namespace std;
 4 int s[10010];
 5 int main()
 6 {
 7     int m,n;
 8     cin>>m>>n;
 9     for(int i=0;i<m;++i)
10     {
11         cin>>s[i];
12     }
13     for(int i=1;i<=n;++i)//进行 n 次排列
14     {
15         next_permutation(s,s+m);
16     }
17     for(int i=0;i<m;++i)
18     {
19         cout<<s[i]<<" ";
20     }
21     return 0;
22 }

 

 

洛谷 P1088 火星人

原文:https://www.cnblogs.com/zkw666/p/12772062.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!