当前位置:首页 > 题解目录 > 正文内容

【题解】飞奔的马

亿万年的星光5年前 (2021-03-26)题解目录11283

【题目描述】

农场里的马,在草场开心地吃着牧草,直到天色晚了,牧马的人会将马依次按号牌大小,依次放入相应的位置。

但是这马总是打乱了顺序,于是牧马人都会想办法把这些马都排好:每次从最前面开始,然后与后面的号牌进行比较,每次将小的号牌的马换到前面。这牧马人整理马的顺序相当耗费体力,每次交换,消耗体力为两匹马槽位的距离*2。他想知道,他要花费多少体力才能完成任务。

【输入描述】

第一行是一个整数n(n<3000)代表马的个数


接下来一行,共n个数,代表马的编号

【输出描述】

一个数,表示花费的体力。

【样例输入】

6
2 3 6 5 8 4

【样例输出】 

14

【题目分析】

  • 实际上是冒泡排序的简单改版,类似于求解交换了多少次

  • 题目中“每次从最前面开始,然后与后面的号牌进行比较,每次将小的号牌的马换到前面。”这句是最关键的

  • 注意每次从最前面开始。

  • 每次将小的号牌的马换到前面。这个最麻烦,题目中只说小的号牌,并没有说最小的号牌,也就是从头开始比较,遇到比我小的就交换。

  • “马槽”就是当前马的位置


首先回顾一下冒泡排序的过程,再回来看到底有哪些不一样的地方。冒泡排序过程点击这里。

【过程分解】

初始状态: 2  3  6  5  8   4 

第一轮:    2  3  5  6  8   4

第二轮:    2  3  4  6  8   5

第三轮:    2  3  4   6 

第四轮:    2  3  4  5  6   8


解释:从初始状态到第一轮,因为从头开始,所以2和3 后面没有比他们俩还小的数字,6后面有两个比6小的数字有两个,5和4,4最小,但是题目中只说比6小的,也就就近原则,所以应该是5和6交换,这就是为什么很多人算不出来答案的主要原因。体力=1*2=2

从第一轮到第二轮,还是没有比 2和3还小的数,比5小的数只有4,然后两个交换,体力=3*2=6。

从第二轮到第三轮,没有比2、3、4还小的数字,比6小的数字只有5,然后两个交换,体力=2*2=4。

从第三轮到第四轮,没有比2,3,4,5还小的数字,比8小的只有6,然后两个交换,体力=1*2=2。

最后的总体力=2+6+4+2=14。


【参考答案】

#include<iostream> 
using namespace std;
int a[3000]; //存数的数组 
int main(){
    int n;
    cin>>n;
    for(int i=1;i<=n;i++){
        cin>>a[i];
    }
    int p,sum=0;
    for(int i=1;i<=n;i++){
        for(int j=i+1;j<=n;j++){
            if(a[i]>a[j]){  //遇到比自己小的 
               swap(a[i],a[j]); //交换 
               sum+=(j-i)*2;  //下标之差的两倍就是体力 
            }
        }
    }
    cout<<sum;
    return 0;
}


    扫描二维码推送至手机访问。

    版权声明:本文由青少年编程知识记录发布,如需转载请注明出处。

    分享给朋友:

    相关文章

    【题解目录】友好城市

    【题解目录】友好城市

    【题目描述】Palmia国有一条横贯东西的大河,河有笔直的南北两岸,岸上各有位置各不相同的N个城市。北岸的每个城市有且仅有一个友好城市在南岸,而且不同城市的友好城市不相同。每对友好城市都向政府申请在河...

    【题解】放苹果(1)

    【题目描述】把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?(用K表示)5,1,1和1,5,1 是同一种分法。【输入】第一行是测试数据的数目t(0≤t≤20)。以下...

    【题解】泥泞路(2019青岛市程序设计竞赛)

    【题目描述】大雨过后,从小A的农场到镇上的公路上有一些泥泞路段,为了方便出行,他决定将若干块长度为L的木板可以铺在这些泥泞路段上,问他至少需要多少块木板,才能将所有的泥泞路段覆盖住。【输入】第一行为正...

    【题解】电池的寿命

    【题目描述】小S新买了一个掌上游戏机,这个游戏机由两节5号电池供电。为了保证能够长时间玩游戏,他买了很多5号电池,这些电池的生产商不同,质量也有差异,因而使用寿命也有所不同,有的能使用5个小时,有的可...

    【题解】大整数减法

    【题目描述】求两个大的正整数相减的差。【输入】共2行,第1行是被减数a,第2行是减数b(a > b)。每个大整数不超过200位,不会有多余的前导零。【输出】一行,即所求的差。【输入样例】9999...

    数的拆分(1)

    【题目描述】任何一个大于1的自然数n,总可以拆分成若干个小于n的自然数之和。例如:当n=7时7=1+1+1+1+1+1+1 7=1+1+1+1+1+2 7=1+1+1+1+3 7=1+1+1+2...