试题 历届真题 交换瓶子【第七届】【省赛】【B组】

简介: 有N个瓶子,编号 1 ~ N,放在架子上。  比如有5个瓶子:  2 1 3 5 4  要求每次拿起2个瓶子,交换它们的位置。  经过若干次后,使得瓶子的序号为:  1 2 3 4 5  对于这么简单的情况,显然,至少需要交换2次就可以复位。  如果瓶子更多呢?你可以通过编程来解决。

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


 比如有5个瓶子:

 2 1 3 5 4


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

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

 1 2 3 4 5


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


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

输入格式为两行:

 第一行: 一个正整数N(N<10000), 表示瓶子的数目

 第二行:N个正整数,用空格分开,表示瓶子目前的排列情况。


 输出数据为一行一个正整数,表示至少交换多少次,才能完成排序。


 例如,输入:

 5

 3 1 2 5 4


 程序应该输出:

 3


 再例如,输入:

 5

 5 4 3 2 1


 程序应该输出:

 2


 资源约定:

 峰值内存消耗 < 256M

 CPU消耗 < 1000ms


 请严格按要求输出,不要画蛇添足地打印类似:“请您输入...” 的多余内容。


 所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。


 注意: main函数需要返回0

 注意: 只使用ANSI C/ANSI C++ 标准,不要调用依赖于编译环境或操作系统的特殊函数。

 注意: 所有依赖的函数必须明确地在源文件中 #include , 不能通过工程设置而省略常用头文件。


 提交时,注意选择所期望的编译器类型。


注意:

for循环里面不能是for(int i=1;i<=n;i++)

否则:1d905b3fed5c498eb8596e60a5f63f72.png

代码:


C语言:


#include <stdio.h>
#define N 10002
int main() {
  int num = 0, n, a[N] = {0}, i;
  scanf("%d", &n);
  for (i = 1; i <= n; i++) {
    scanf("%d", &a[i]);
  }
  for (i = 1; i <= n; i++) {
    while (a[i] != i) {
      int t = a[a[i]];
      a[a[i]] = a[i];
      a[i] = t;
      num++;
    }
  }
  printf("%d", num);
  return 0;
}


C++:


#include <iostream>
using namespace std;
#define N 10002
int main() {
  int num = 0, n, a[N] = {0}, i;
  cin >> n;
  for (i = 1; i <= n; i++) {
    cin >> a[i];
  }
  for (i = 1; i <= n; i++) {
    while (a[i] != i) {
      int t = a[a[i]];
      a[a[i]] = a[i];
      a[i] = t;
      num++;
    }
  }
  cout << num;
  return 0;
}


Then we can see:f667c577afd3491b827914e252af0e6a.png


相关文章
|
2月前
|
运维 数据可视化 C++
2025 热门的 Web 化容器部署工具对比:Portainer VS Websoft9
2025年热门Web化容器部署工具对比:Portainer与Websoft9。Portainer以轻量可视化管理见长,适合技术团队运维;Websoft9则提供一站式应用部署与容器管理,内置丰富开源模板,降低中小企业部署门槛。两者各有优势,助力企业提升容器化效率。
225 1
2025 热门的 Web 化容器部署工具对比:Portainer VS Websoft9
|
JavaScript 前端开发 API
Web Components详解-HTML Templates
Web Components详解-HTML Templates
204 6
|
Java API 计算机视觉
图像处理之添加高斯与泊松噪声
图像处理之添加高斯与泊松噪声
245 1
|
11月前
|
Arthas 监控 安全
arthas如何跟踪某个方法?并查看方法的入参和出参?
arthas如何跟踪某个方法?并查看方法的入参和出参?
1800 6
|
网络安全 文件存储 数据安全/隐私保护
绿联云NAS一些探索(1):SSH、包管理器探测、安装docker-compose等
绿联云NAS一些探索(1):SSH、包管理器探测、安装docker-compose等
1098 6
|
前端开发 物联网 定位技术
Kratos微服务框架实现IoT功能:设备实时地图
IoT,也就是物联网,万物互联,在未来肯定是一个热点——实际上,现在物联网已经很热了。那好,既然这一块这么有前途。那我们就来学习怎么开发物联网系统吧。可是,作为一个小白,两眼一抹黑:我想学,可是我该如何开始?这玩意儿到底该咋整呢?在这个时候,我发现了B站开源的微服务框架[go-kratos](https://github.com/go-kratos/kratos)。那么,Kratos能否实现物联网的系统和功能呢?答案是:必须可以。
590 0
Kratos微服务框架实现IoT功能:设备实时地图
|
Web App开发 XML Java
Android 7.1 WebView 实现方式选择
Android 7.1 WebView 实现方式选择
680 0
|
设计模式 算法 数据库
【软考备战·希赛网每日一练】2023年4月21日
文章目录 一、今日成绩 二、错题总结 第一题 第二题 第三题 第四题 三、知识查缺
124 0
|
弹性计算 安全 Ubuntu
一个轻量级ECS能做什么
分享我用ECS做了啥
268 1
|
存储 编解码
Google earth engine——如何导入栅格数据?
Google earth engine——如何导入栅格数据?
360 0
Google earth engine——如何导入栅格数据?