题目:
题目描述
有N(1≤N≤1000)头奶牛,它们都被标上一个优先等级编号:1,2或3。用来表示它们喝水时的优先次序,编号为l的最优先,编号为2的其次,编号为3的最后。每天奶牛开始时排成一行,但总是很乱,需要你把它们重新排成编号为1的奶牛在最前面,编号为2的其次,编号为3的奶牛在最后。你能计算出最少需要多少的交换次序来完成这次重排吗?
输入
第1行:1个整数N;
第2至N+I行:第i+l行有一个整数表示开始队列中第i头奶牛的编号。
输出
1行,只一个整数,表示最少需要交换次数。
样例输入
9
2 2 1 3 3 3 2 3 1
样例输出
4
#include <iostream>
using namespace std;
int main()
{
int N;
while (cin>>N)
{
int *a = new int [N];
int i, num1=0, num2=0, num3=0;
for (i = 0; i < N; ++i)
{
cin >> a[i];
if (a[i] == 1)
num1++;
else if (a[i] == 2)
num2++;
else
num3++;
}
int res = 0;
for (i = 0; i < num1; i++)
{
if (a[i] != 1)
res++;
}
for (i = num1; i < num1+num2; i++)
{
if (a[i] == 3)
res++;
}
cout << res << endl;
}
system("pause");
return 0;
}