2016-07-15
UVA - 299 Train Swapping
题目大意:交换相邻车厢使其最终编号从小到大排列,求要交换几次。
解题思路:冒泡排序加个统计次数的变量。
注意:一开始用字符数组进行数字的读取,结果WA,才注意到用字符数组不能读两位以上的数字,后来改用整形数组才AC。
#include <iostream>
using namespace std;
int num = 0;
int s[1000];
void swap(int &a, int &b) {
int t;
t = a;
a = b;
b = t;
}
int main () {
int n;
cin >> n;
while ( n-- ) {
num = 0;
int m;
cin >> m;
for (int i = 0; i < m; i++)
cin >> s[i];
for (int i = 0; i < m; i++) {
for (int j = 0; i+j < m-1; j++) {
if ( s[j] > s[j+1] ) {
swap(s[j],s[j+1]);
num++;
}
}
}
cout << "Optimal train swapping takes " << num << " swaps." << endl;
}
return 0;
}