random_shuffle()函数
这是c++库内的随机分配函数,将起始地址到末端地址的前一个地址之间的数随机存。
具体使用这里给一个网址函数教程
一个数的运用
如果是数组,从0开始的数组,想弄成循环数组计算,可以使用(i+j)%n(注:n是这个数组的长度j是要加的数,i是现在的位置)
例题
输入:
一个数t,循环t次,输入n,然后输入2n个数。
输出:
将2n个数输出,其中任意i-1和i+1之和不等于i的两倍,且是个循环的数组2n+1是第一个也满足此条件。
题目链接
代码如下:
超级暴力的解题方法
#include<iostream>
#include<stack>
#include<string>
#include<algorithm>
#define bug(a) (cout<<"*"<<a<<endl)
#define bugg(a,b) (cout<<"*"<<a<<' '<<b<<endl)
#define buggg(a,b,c) (cout<<"*"<<a<<' '<<b<<' '<<c<<endl)
#define endl '\n'
#define MAX 0x3f3f3f
using namespace std;
typedef long long ll;
int arr[100];
int main()
{
ios::sync_with_stdio(false);
cin.tie();
cout.tie();
int n,i,j,t;
cin >> t;
while(t--){
cin >> n;
n *= 2;
for (i = 0; i < n; i++)
cin >> arr[i];
while (1) {
bool flag = true;
random_shuffle(arr, arr + n);
for (i = 0; i < n; i++) {
if (arr[i] + arr[(i + 2) % n] == 2 * arr[(i + 1) % n])
flag = false;
}
if (flag)break;
}
for (i = 0; i < n; i++)
cout << arr[i] << ' ';
cout << endl;
}
}