在一个旧式的火车站旁边有一座桥,其桥面可以绕河中心的桥墩水平旋转。车站的职工小明发现桥的长度最多能容纳两节车厢,如果将桥旋转 180 度,则可以把相邻两节车厢的位置交换,用这种方法可以重新排列车厢的顺序。于是他就负责用这座桥将进站的车厢按车厢号从小到大排列。小明退休后,火车站决定将这一工作自动化,其中一项重要的工作是编一个程序,输入初始的车厢顺序,计算最少用多少步就能将车厢排序。

输入输出格式

输入格式
第一行有一个整数 n ,表示车厢的总数;
第二行有
n 个整数,表示初始的车厢顺序,每个整数用一个空格隔开。
输出格式
针对输入,打印出最少的旋转次数。

输入输出样例1

输入
4
4 3 2 1
输出
6

输入输出样例2

输入
5
1 2 3 4 5
输出
0

1≤ n ≤10000

采用冒泡排序的思想,如果右边的比左边的小就调换位置,统计调换位置的次数。

import java.util.*;
public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.print("输入个数:");
        int n = scanner.nextInt();
        int[] arr = new int[n];
        System.out.print("输入元素:");
        for (int i = 0; i < n; i++)
            arr[i] = scanner.nextInt();
        int sum = 0, t;
        boolean status = true;
        while (status) {
            status = false;
            for (int i = 0; i < n - 1; i++) {
                if (arr[i + 1] < arr[i]) {
                    t = arr[i + 1];
                    arr[i + 1] = arr[i];
                    arr[i] = t;
                    sum++;
                    status = true;
        System.out.println("需要次数:" + sum);
                                    1.问题重述
桥的长度最多能容纳两节车厢,可以把相邻两节车厢的位置交换,用这种方法可以重新排列车厢的顺序。用这座桥将进站的车厢车厢号从小到大排列。编一个程序,输入初始的车厢顺序,计算最少用多少步就能将车厢排序。
从1到n的某一个全排列的一个数列 →输入
使用给定操作使数列升序的最少次数→输出
只能使用特定操作对序列进行排序→约束
最少次数→最优解
题目输入是从1到n的某一个全排列的一个数列 ,那么可以知道输入的数ai范围在[1,n]内,且每个数字最多出现一次。
题目约束是使用特定
在一个旧式的火车站旁边有一座桥,其桥面可以绕河中心的桥墩水平旋转。一个车站的职工发现桥的长度最多能容纳两节车厢,如果将桥旋转180度,则可以把相邻两节车厢的位置交换,用这种方法可以重新排列车厢的顺序。于是他就负责用这座桥将进站的车厢车厢号从小到大排列。他退休后,火车站决定将这一工作自动化,其中一项重要的工作是编一个程序,输入初始的车厢顺序,计算最少用多少步就能将车厢排序。
                                    题目地址:
https://www.luogu.com.cn/problem/P1116
题目的本质是,给定一个正整数序列,只允许交换相邻数字的顺序,问至少交换多少次,可以将整个序列排好序。这道题本质上是求逆序对个数(逆序对指某两个数字大数排在小数之前)。而求逆序对个数,有个经典的算法,也就是归并排序。代码如下:
#include <iostream>
using namespace...
虽然都对冒泡排序很熟悉,但是还是记录一下。
从小到大排序:if(a[j]>a[j+i]),两个换位置,前面大于后面的,大的放后面
从大到小排序:if(a[j]<a[j+1]),两个换位置,后面大于前面,大的放前面
#include<cstdio>
#include<iostream>
using namespace std;
int train[10000];
//这道题搞得好像很复杂,起始就是一个冒泡排序,只不过冒泡排序的时候加了一步,就是每次交换.
在一个旧式的火车站旁边有一座桥,其桥面可以绕河中心的桥墩水平旋转。
一个车站的职工发现桥的长度最多能容纳两节车厢,
如果将桥旋转 180 度,则可以把相邻两节车厢的位置交换,用这种方法可以重新排列车厢的顺序。
于是他就负责用这座桥将进站的车厢车厢号从小到大排列。
他退休后,火车站决定将这一工作自动化,其中一项重要的工作是编一个程序,
输入初始的车厢顺序,计算最少用多少步就能将车厢排序。
第一行是车厢总数 N,
第二行是 N 个不同的数表示初始的车厢顺序。
一个数据,是最少的旋
                                    最近人事找我,让我完成一个app,为了高逼格,人事让实现人脸识别签到,签完到后进行座位的随机分配。主要是为了让不同部门的人坐在一起,促进部门人员之间的交流。人脸识别这块不难,直接用了讯飞的人脸识别模块,难的是座位的随机分配啊,这对于长期只会复制粘贴的我来说,写个小程序真的很难。但是没办法,还得自己写,网上又找不到demo。我就把demo贴出来了哈,注释写在上面:
class Desk{