299 - Train Swapping - Uva online

来源:互联网 发布:c语言简单小程序 编辑:程序博客网 时间:2024/06/10 02:33

   一个小程序,却不乏学习之处,通过这么一个小小的程序,让我注意到,所开数组的大小是有限制的,如果开得过大,不仅有编译出错的可能,还会造成内存的大量浪费,切记!

题目来源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;
}

原创粉丝点击