e555666ee 2023-06-15 23:02 采纳率: 37.5%
浏览 21

为什么他有两个侧式数据是错误的

小民和同学们要参加排队游戏。游戏的规则是:除了小民外的每位同学的背后被贴上了1个整数作为编号,随后并排排成一行并且不许相互交流;只有小民可以走到每位同学背后看到他们的编号;但是他只能让相邻的两位同学交换位置。知道初始的编号顺序后,计算小民最少需要进行多少次交换位置就能将同学们完成按编号升序排列。

#include<stdio.h>
#include<iostream>
using namespace std;
int main()
{
    int n,a[10005],count=0,i,j;
    cin>>n;
    for(int m=1;m<=n;m++)
    {
        cin>>a[m];
    }
    int tmp=a[0];
    for(int i=1;i<n;i++)
        for(int j=1;j<=n-i;j++)
        {
            if(a[j]>a[j+1])
            swap(a[j],a[j+1]); 
            count++;
        }
    cout<<count;
    return 0;
} 

  • 写回答

3条回答 默认 最新

  • 卑微的Coder 2023-06-16 00:13
    关注

    对于这个问题,可以使用冒泡排序的思想。

    如果编号不是按升序排列的,小民就需要进行交换。在交换的过程中,小民需要记录交换的次数,直到所有同学的编号按升序排列为止。

    具体的算法步骤如下:

    用一个计数器 counts 来记录需要交换的次数;
    从第一位同学开始,依次检查相邻的两位同学的编号,如果后一位同学的编号比前一位同学的编号小,则交换他们的位置,并将 counts 加一;
    重复执行步骤 2,直到所有同学的编号按升序排列。
    代码实现如下:

    def bubble_sort(steps):
        n = len(steps)
        counts = 0  # 记录交换次数
        for i in range(n - 1): # i表示循环的轮数
            for j in range(n - i - 1): # j表示本轮循环中需要比较的元素的次数,每一轮都会确定一个元素的位置,所以n-i-1
                if steps[j] > steps[j + 1]: # 相邻的两个元素,如果前面的元素大于后面的元素,就需要交换
                    steps[j], steps[j + 1] = steps[j + 1], steps[j]
                    counts += 1
        return counts
     
    if __name__ == '__main__':
        steps = [5, 1, 4, 2, 8]
        counts = bubble_sort(steps)
        print("最小交换次数为:", counts)
    
    

    代码中,steps 是各位同学的编号列表。在 bubble_sort 函数中,我们首先获取列表长度 n,然后通过双层循环对列表进行排序。外层循环控制排序轮数,内层循环是本轮循环中需要比较的元素的次数。如果当前元素比下一个元素大,就交换它们的位置,并增加交换次数。

    最后,打印输出交换次数即可。

    评论

报告相同问题?

问题事件

  • 创建了问题 6月15日

悬赏问题

  • ¥15 使用docker安装chemex后无法启动
  • ¥15 关于#vue.js#的问题:word excel和ppt预览问题语言-javascript)
  • ¥15 Apache显示系统错误3该如何解决?
  • ¥30 uniapp小程序苹果手机加载gif图片不显示动效?
  • ¥20 js怎么实现跨域问题
  • ¥15 C++dll二次开发,C#调用
  • ¥15 请教,如何使用C#加载本地摄像头进行逐帧推流
  • ¥15 Python easyocr无法顺利执行,如何解决?
  • ¥15 为什么会突然npm err!啊
  • ¥15 java服务连接es读取列表数据,服务连接本地es获取数据时的速度很快,但是换成远端的es就会非常慢,这是为什么呢