首页 > 其他分享 >寒假每日一题——困牛排序(思维题)

寒假每日一题——困牛排序(思维题)

时间:2023-04-02 18:33:22浏览次数:39  
标签:排序 int 困牛 寒假 奶牛 Farmer FJ John 顺序

困牛排序

问题描述

Farmer John 正在尝试将他的 N 头奶牛,方便起见编号为 1…N,在她们前往牧草地吃早餐之前排好顺序。

当前,这些奶牛以 p1,p2,p3,…,pN 的顺序排成一行,Farmer John 站在奶牛 p1 前面。

他想要重新排列这些奶牛,使得她们的顺序变为 1,2,3,…,N,奶牛 1 在 Farmer John 旁边。

今天奶牛们有些困倦,所以任何时刻都只有直接面向 Farmer John 的奶牛会注意听 Farmer John 的指令。

每一次他可以命令这头奶牛沿着队伍向后移动 k 步,k 可以是范围 1…N−1 中的任意数。

她经过的 k 头奶牛会向前移动,腾出空间使得她能够插入到队伍中这些奶牛之后的位置。

例如,假设 N=4,奶牛们开始时是这样的顺序:

FJ: 4, 3, 2, 1

唯一注意 FJ 指令的奶牛是奶牛 4。

当他命令她向队伍后移动 2 步之后,队伍的顺序会变成:

FJ: 3, 2, 4, 1

现在唯一注意 FJ 指令的奶牛是奶牛 3,所以第二次他可以给奶牛 3 下命令,如此进行直到奶牛们排好了顺序。

Farmer John 急欲完成排序,这样他就可以回到他的农舍里享用他自己的早餐了。

请帮助他求出将奶牛们排好顺序所需要的最小操作次数。

输入格式
输入的第一行包含 N。

第二行包含 N 个空格分隔的整数,p1,p2,p3,…,pN,表示奶牛们的起始顺序。

输出格式
输出一个整数,为 Farmer John 采用最佳策略可以将这 N 头奶牛排好顺序所需要的操作次数。

数据范围
1≤N≤100
输入样例:

4
1 2 4 3

输出样例:

3

题意理解

在这里插入图片描述

完整代码

#include <bits/stdc++.h>
using namespace std;
const int N = 110;
int n;
int q[N];
int main()
{
    scanf("%d", &n);
    for(int i = 1; i <= n; i++)
    {
        scanf("%d", &q[i]);
    }
    for(int i = n - 1; i; i--)
    {
        if(q[i] > q[i + 1])
        {
            printf("%d", i);
            return 0;
        }
    }
    printf("0");
    return 0;
}

标签:排序,int,困牛,寒假,奶牛,Farmer,FJ,John,顺序
From: https://www.cnblogs.com/i-rong/p/17280977.html

相关文章

  • 寒假每日一题——大型植被恢复
    大型植被恢复问题描述长时间的干旱使得FarmerJohn的N块草地上牧草匮乏。随着雨季即将到来,现在应当是重新种植的时候了。在FarmerJohn的储物棚里有四个桶,每个桶里装着一种不同的草种。他想要在每块草地上播种其中一种草。作为一名奶农,FarmerJohn想要确保他的每头奶......
  • 快速排序及其优化
    packageleetcode.mySort;importjava.util.Random;publicclassQuickSort{privatefinalstaticRandomrandom=newRandom(System.currentTimeMillis());//快速排序的不同类型的写法,差别在于partition下面的partition是大学时候老师教的方法partition2是//......
  • 总结所有的排序方式
    一、插入排序就是从左到右遍历,然后看看这个数是否比前面的数小,如果比前面的小就插入到这个数的前面。publicstaticvoidinsertionSort(int[]arr){if(arr!=null&&arr.length>=2){for(inti=1;i<arr.length;++i){for......
  • 记一个C#排序
    usingSystem;namespacePX;publicclassPXTest{publicstaticvoidShow(){ScoreInfoscoreInfo=newScoreInfo(){ID=1,Name="张三",CSharp=12,DataStruct=24,......
  • 【入门】Go语言排序算法详解
    1、冒泡排序冒泡排序是一种简单的排序算法,它重复地遍历要排序的列表,比较相邻的两个元素,并在必要时交换它们的位置,直到没有任何一对元素需要交换为止。该算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。packagemainimport"fmt"//我们定义了一个名为`bu......
  • 《Mysql基础》【Mysql表查询、去重、表连接、左连接 右连接、子表查询、排序、分组等
     --mysql数据库程序设计笔记:第三章:查询1、单表查询:1)、简单查询查所有列:格式:select*from表名;举例:mysql>select*fromtb_student;+----+-----------+-------------+------+------------+----------+--------+---------+-------------------+|id|studentNo|s......
  • VBA 对象数组排序算法分享
     FunctionSrotObjectByProperty(objsToSortAsVariant,PropertyNameAsString,Optional降序AsBoolean=True)IfIsEmpty(objsToSort)ThenExitFunctionIfInStr(TypeName(objsToSort),"()")<1ThenExitFunction'IsArray()issom......
  • 桶排序
    leetcode  347.前K个高频元素    顾名思义,桶排序的意思是为每个值设立一个桶,桶内记录这个值出现的次数(或其它属性),然后对桶进行排序。红色代表频率。 最后,我们从后往前遍历,直到找到k个旧桶。 ......
  • Java 冒泡排序
    冒泡排序冒泡排序由嵌套循环完成,并分为外循环和内循环内循环负责比较数组中,两个相邻的元素,如果第一个数比第二个数大,则交换两者的位置,相邻两数依次循环进行比较每完成一次内循环比较(即外循环走完一步)都会产生一个当次内循环最大或者最小的数字并放在数组末尾所以外循......
  • java方法- 冒泡排序
    冒泡排序冒泡排序是最为出名的排序之一,总共有八大排序冒泡的代码是两层循环,外层冒泡轮数,里层依次比较算法时间复杂度为O(n2)优化优化方法之一 ......