水题.
题意是给你车厢(PS:应该是吧╮(╯▽╰)╭)的顺序, 让你计算把它们按顺序排成1,2,3,4...所用的次数.
每次只能调换两节车厢.
思路很简单, 一直搜索数组, 把数组从小到大排列, 每排列一次记录一次次数.
#include <cstdio>
#include <cstring>
using namespace std;
void Move(int i);
int train[100];
int main()
{
//freopen("input.txt", "r", stdin);
int T, n;
int i, j;
int cnt;
int flag;
scanf("%d", &T);
while (T--)
{
cnt = 0;
scanf("%d", &n);
for (i = 0; i < n; i++)
scanf("%d", &train[i]);
//开始搜索.
while (true)
{
flag = 0;
for (i = 0; i < n - 1; i++)
if (train[i] > train[i + 1])
{
Move(i);
flag = 1;
cnt++;
}
if (flag == 0) //如果搜索一遍没有可以调换的数字, 退出循环.
break;
}
printf("Optimal train swapping takes %d swaps.\n", cnt);
}
return 0;
}
void Move(int i)
{
int temp = train[i];
train[i] = train[i + 1];
train[i + 1] = temp;
}