交换瓶子(贪心)

有 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;
}
相关推荐
hanlin033 小时前
刷题笔记:力扣第32题-最长有效括号
笔记·算法·leetcode
All for pursuit.4 小时前
【动态规划-21】312.戳气球
数据结构·c++·算法·leetcode·动态规划
碧海银沙音频科技研究院6 小时前
基于炬芯ATS3089X自研AEC声学回声消除算法
算法
通问AI6 小时前
在两台 Mac Studio 上跑 800B 模型:MLX + RDMA over Thunderbolt 实测与四道门选型法
算法
ZywOo6236 小时前
《算法竞赛进阶指南》0x03 前缀和与差分
算法
Scintilla_y7 小时前
DAY2 滑动窗口
算法·leetcode·散列表
lvwangshu7 小时前
笛卡尔树
算法·图论
026d237 小时前
状态信号只知“其然”不知“其所以然”:变工况机械故障诊断的物理盲区
算法
姜鱼问生7 小时前
备份和服务器在同一台机器上,等于没备份
算法·架构
姜鱼问生7 小时前
别再 chmod 777 了,用 ACL 给它开一扇窗
后端·算法·架构