#1781. 珅泽教育CSP-J第一轮模拟考第八套 第 40 题
珅泽教育CSP-J第一轮模拟考第八套 第 40 题
三、完善程序(单选题,每小题3分,共计30分)
第1题
solve(int n, int a[]) 解决的问题是:给定 个整数 ,每个数字都是 中的一个。不断交换这个序列中的任意两个数字,让这个序列成为升序,函数返回最少需要的交换次数。
int cal(int q[3][3], int u, int v)
{
int pair = std::min(____(1)____);
q[u][v] -= pair;
q[v][u] -= pair;
return pair;
}
int solve(int n, int a[])
{
int c[3] = {0, 0, 0};
for (int i = 0; i < n; ++i)
{
____(2)____;
}
int q[3][3] = {{0, 0, 0}, {0, 0, 0}, {0, 0, 0}};
for (int i = 0; i < n; ++i)
{
int from = ____(3)____;
int to;
if (i < c[0])
to = 0;
else if (i < ____(4)____)
to = 1;
else
to = 2;
q[from][to]++;
}
int sum = 0;
sum += cal(q, 0, 1);
sum += cal(q, 0, 2);
sum += cal(q, 1, 2);
sum += 2 * (____(5)____);
std::cout << sum << "\n";
}
(5) 处应填( )。
{{ select(1) }}
q[0][1] + q[0][2]q[1][0] + q[0][2]q[1][2] + q[2][0]q[1][0] + q[2][1]