交换瓶子(贪心)

有 N 个瓶子,编号 1 ∼ N,放在架子上。

比如有 5 个瓶子:

2 1 3 5 4

要求每次拿起 2 个瓶子,交换它们的位置。

经过若干次后,使得瓶子的编号为:

1 2 3 4 5

对于这么简单的情况,显然,至少需要交换 2 次就可以复位。

如果瓶子更多呢?你可以通过编程来解决。

​输入格式​​:

  • 第一行包含一个整数 N,表示瓶子数量(1 ≤ N ≤ 10000)
  • 第二行包含 N 个整数,表示瓶子目前的排列(保证是 1 ∼ N 的排列)

​输出格式​​:

  • 输出一个整数,表示最少需要交换多少次

​样例输入1​​:

5 3 1 2 5 4

​样例输出1​​:

3

cpp 复制代码
#include <bits/stdc++.h>
using namespace std;
int main()
{
  // 请在此输入您的代码
  int n;cin>>n;
  int a[10005];
  for(int i=1;i<=n;i++){
    cin>>a[i];
  }
  int c=0;
  for(int i=1;i<=n;i++){
    if(i!=a[i]){
      for(int j=i+1;j<=n;j++){
        if(a[j]==i){
          swap(a[i],a[j]);
          c++;
          break;
        }
      }
    }
  }
  cout<<c;
  return 0;
}
相关推荐
Tisfy6 小时前
LeetCode 3531.统计被覆盖的建筑:最大最小值
算法·leetcode·题解·桶排序
京东零售技术7 小时前
SIGIR 2025 | 基于图同构网络的群体建模在点击率预测中的应用
算法
程序员西西7 小时前
深入剖析 Java 中的 ZGC 机制:原理、优势与实践
java·后端·算法
月明长歌7 小时前
【码道初阶】Leetcode.189 轮转数组:不熟悉ArrayList时踩得坑,被Arraylist初始化骗了?
java·算法·leetcode·职场和发展
卡尔AI工坊7 小时前
万众瞩目的 GPT 5.2,连个火柴人游戏都做不明白?
后端·算法
fantasy_arch7 小时前
leetcode算法-最大乘积子数组
算法·leetcode·职场和发展
dragoooon347 小时前
[hot100 NO.8~12]
算法
kaikaile19957 小时前
MATLAB计算卫星星下点轨迹
开发语言·算法·matlab
_OP_CHEN7 小时前
【算法基础篇】(三十一)动态规划之基础背包问题:从 01背包到完全背包,带你吃透背包问题的核心逻辑
算法·蓝桥杯·动态规划·背包问题·01背包·完全背包·acm/icpc
长安er8 小时前
LeetCode876/141/142/143 快慢指针应用:链表中间 / 环形 / 重排问题
数据结构·算法·leetcode·链表·双指针·环形链表