一个小程序,却不乏学习之处,通过这么一个小小的程序,让我注意到,所开数组的大小是有限制的,如果开得过大,不仅有编译出错的可能,还会造成内存的大量浪费,切记!
题目来源:uva.onlinejudge.org/index.php
#
include < iostream >
#include < cstring >
using namespace std;
const int MAX = 3010;
const int MIN = 80;
int main() {
int N, L, i, j, k, l, a;
int Train[MAX][MIN];
//记录每种情况的编号
int Swapnum[MAX];
//保存移动的次数
memset(Swapnum, 0, MAX);
cin >> N;
for
(i = 0; i < N; i++) {
cin >> L;
for
(j = 0; j < L; j++)
cin >> Train[i][j];
for
(j = 0; j < L; j++) {
k = j;
for
(l = j + 1; l < L; l++)
if
(Train[i][k] > Train[i][l])
k = l;
Swapnum[i] += k - j;
//此趟移动的次数
if
(k != j) {
int t = Train[i][k];
for
(a = k; a > j; a--)
//将数据重新排序
Train[i][a] = Train[i][a - 1];
Train[i][j] = t;
}
}
}
for
(i = 0; i < N; i++)
cout <<
"Optimal train swapping takes "
<< Swapnum[i] <<
" swaps."
<< endl;
return
0;
}
|