方法一:2n张牌,分成两堆,右手最后一张放;左手最后一张放,右手倒数第二张放,左手倒数第二张放
#include<bits/stdc++.h>
using namespace std;
void xipai(vector<int> &nums)
{
vector<int> temp=nums;
int n=nums.size()/2;
for(int i=0;i<n;i++)
{
nums[2*i]=temp[i];
nums[2*i+1]=temp[i+n];
}
}
int main()
{
int n;
cin>>n;
vector<int> nums(2*n);
for(int i=0;i<2*n;++i)
{
cin>>nums[i];
}
xipai(nums);
for(int i=0;i<nums.size();++i)
cout<<nums[i]<<" ";
cout<<endl;
return 0;
}
方法二:使用函数 srand(time(0)) 和rand()%n;
rand函数底层:伪随机,约定,a1=f(num), a(n+1)=f(an);
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n;
cin>>n;
vector<int> nums(n);
for(int i=0;i<n;++i)
{
cin>>nums[i];
}
srand(time(0)); //拿当前系统时间作为种子,由于时间是一直变化的,种子也是变换的
vector<int>::iterator ite;
while(n>0)
{
int r=rand()%n;
cout<<nums[r]<<" ";
ite=find(nums.begin(),nums.end(),nums[r]);
nums.erase(ite);
n--;
}
cout<<endl;
return 0;
}
因篇幅问题不能全部显示,请点此查看更多更全内容