交换瓶子(贪心)

有 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;
}
相关推荐
cpp_25012 小时前
P1024 [NOIP 2001 提高组] 一元三次方程求解
数据结构·c++·算法·题解·二分答案·洛谷·csp
田梓燊8 小时前
力扣:23.合并 K 个升序链表
算法·leetcode·链表
re林檎9 小时前
算法札记——4.27
算法
AI人工智能+电脑小能手9 小时前
【大白话说Java面试题】【Java基础篇】第15题:JDK1.7中HashMap扩容为什么会发生死循环?如何解决
java·开发语言·数据结构·后端·面试·哈希算法
数据牧羊人的成长笔记9 小时前
逻辑回归与Softmax回归
算法·回归·逻辑回归
郑州光合科技余经理10 小时前
同城O2O海外版二次开发实战:从支付网关到配送算法
开发语言·前端·后端·算法·架构·uni-app·php
Mrlxl.cn12 小时前
计算机网络——网络层
c语言·数据结构·计算机网络·考研
d111111111d13 小时前
STM32-UART封装问题解析
笔记·stm32·单片机·嵌入式硬件·学习·算法
寒秋花开曾相惜13 小时前
(学习笔记)4.2 逻辑设计和硬件控制语言HCL(4.2.1 逻辑门&4.2.2 组合电路和HCL布尔表达式)
linux·网络·数据结构·笔记·学习·fpga开发
Jiangxl~14 小时前
IP数据云如何为不同行业提供精准IP查询与风险防控解决方案?
网络·网络协议·tcp/ip·算法·ai·ip·安全架构