准备了一周测试一下自己,难度为乙级,确实不难,但是我对STL各种不熟,还是花费了好多时间!!!引以为戒!勤加练习!
一 洗牌算法(k什么洗牌算法我忘了)
因为几分钟就做出来了所以忘记复制题目了...
题意大概是给一个数N表示需要被洗的牌的个数,给一个随机序列{X,X,X...X},然后根据洗牌算法来打乱顺序的{1,2...N}
输入:N
X X X...X(输入样例我真的记不得了...)
输出:被打乱的序列
解题思路:建两个数组,a和b,a存顺序的{1,2,...N},b存输入的随机序列。以随机序列的值作为需要被交换的下标进行交换即可。
代码:
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
int main(){
int n,temp;
cin>>n;
vector<int> a(n);
vector<int> b(n);
for(int i=1;i<=n;i++){
a[i]=i;
}
for(int i=1;i<=n;i++){
cin>>temp;
b[i]=temp;
}
for(int i=1;i<=n;i++){
swap(a[i],a[b[i]])