在一个旧式的火车站旁边有一座桥,其桥面可以绕河中心的桥墩水平旋转。车站的职工小明发现桥的长度最多能容纳两节车厢,如果将桥旋转
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{