XHXD. 2024-03-28 22:42 采纳率: 100%
浏览 0
已结题

c语言交换瓶子问题蓝桥杯

交换瓶子问题,有N个名字,编号为1~N,比如有5个瓶子,分别为2 1 3 5 4。要求每次拿起两个瓶子交换他们的位置,那么最少交换两次可以让顺序变为12345,现在由你输入瓶子数量和编码顺序,输出将顺序排好的最少交换次数。
不知道哪里错了,提交到蓝桥杯检测是错误的,请问哪里错了

#include<stdio.h>
#include<stdlib.h>
int main()
{
    int n=0;
    scanf("%d",&n);
    int* a=(int*)malloc(n*sizeof(int));
    for(int i=0;i<n;i++)
    {
        scanf("%d",&a[i]);
    }
    int* b=(int*)malloc(n*sizeof(int));
    for(int i=0;i<n;i++)
    {
        b[i]=i+1;
    }
    int key=0,kept=0,count=0,i=0;
    while(i<n)
    {
        if(a[i]!=b[i])
        {
            key=a[i];
            kept=a[key-1];
            a[key-1]=b[key-1];
            a[i]=kept;
            count++;
        }
        i++;
    }
    printf("%d",count);
    system("pause");
    return 0;
}

  • 写回答

4条回答 默认 最新

  • 关注

    XHXD. 晚上好🌙🌙🌙
    本答案参考ChatGPT-3.5

    在你的代码中,存在一个问题:

    1. 你使用了自由存储空间(动态内存分配)来创建数组 ab,但在使用完后没有释放内存,这样会导致内存泄漏。

    下面是修改后的代码:

    #include <stdio.h>
    #include <stdlib.h>
    
    int main() {
        int n = 0;
        scanf("%d", &n);
        int *a = (int *)malloc(n * sizeof(int));
        for (int i = 0; i < n; i++) {
            scanf("%d", &a[i]);
        }
        
        int count = 0;
        for (int i = 0; i < n; i++) {
            while (a[i] != i + 1) {
                int temp = a[i];
                a[i] = a[temp - 1];
                a[temp - 1] = temp;
                count++;
            }
        }
        
        printf("%d", count);
        free(a);
    
        return 0;
    }
    

    此代码的改进点为:

    1. 去除了不必要的 b 数组,直接在原始数组 a 上进行元素交换,可以节省空间。
    2. 使用双重循环来实现元素交换的目标,外层循环遍历每个元素,在内层循环中只要该元素不在正确的位置上,就进行交换,并增加 count 计数器来记录交换次数。
    3. 在修改完数组后,通过 free() 函数来释放动态分配的内存。

    希望这些修改能够帮助到你,并且通过蓝桥杯的检测。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 4月5日
  • 已采纳回答 3月28日
  • 创建了问题 3月28日

悬赏问题

  • ¥15 hexo安装这种情况怎么办
  • ¥100 找hCaptcha图形验证码自动识别解决方案
  • ¥15 启动pycharm出错
  • ¥15 Windows Script Host 无法找到脚本文件"C:\ProgramData\Player800\Cotrl.vbs”
  • ¥15 matlab自定义损失函数
  • ¥15 35114 SVAC视频验签的问题
  • ¥15 impedancepy
  • ¥15 求往届大挑得奖作品(ppt…)
  • ¥15 如何在vue.config.js中读取到public文件夹下window.APP_CONFIG.API_BASE_URL的值
  • ¥50 浦育平台scratch图形化编程