一、题目描述
在一个旧式的火车站旁边有一座桥,其桥面可以绕河中心的桥墩水平旋转。一个车站的职工发现桥的长度最多能容纳两节车厢,如果将桥旋转
180
180
180 度,则可以把相邻两节车厢的位置交换,用这种方法可以重新排列车厢的顺序。于是他就负责用这座桥将进站的车厢按车厢号从小到大排列。他退休后,火车站决定将这一工作自动化,其中一项重要的工作是编一个程序,输入初始的车厢顺序,计算最少用多少步就能将车厢排序。
二、输入格式
共两行。
第一行是车厢总数
N
(
≤
10000
)
N( \le 10000)
N(≤10000)。
第二行是
N
N
N 个不同的数表示初始的车厢顺序。
三、输出格式
一个整数,最少的旋转次数。
四、样例
(1)样例输入
4
4 3 2 1
(2)样例输出
6
五、正确代码
import java.util.*;
public class Main{
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int[] a = new int[n + 1];
int number = 0;
for (int i = 1; i <= n; i++) {
a[i] = sc.nextInt();
}
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= i; j++) {
if (a[i] < a[j]) {
number = number + 1;
}
}
}
System.out.println(number);
}
}
六、思路
本题考查的主要就是冒泡排序,并统计冒泡排序中元素交换的次数
题目:桥的长度最多能容纳两节车厢,如果将桥旋转180度,则可以把相邻两节车厢的位置交换,用这种方法可以重新排列车厢的顺序。于是他就负责用这座桥将进站的车厢按车厢号从小到大排列
即只通过交换相邻两个元素实现元素的从小到大排序
而冒泡排序的实现原理是:依次比较两个相邻的元素,当该对元素顺序不正确时就进行交换,从左到右一轮遍历得到一个最值;重复此步骤,直到没有任何两个相邻的元素可以交换,就表明完成了排序。
由此我们可知本题就是使用冒泡排序,并且只需要统计冒泡排序中元素交换的次数,不需要真正实现冒泡排序,得到排序后的结果。
链接: 冒泡排序讲解
|