交换瓶子

简介: 交换瓶子 有N个瓶子,编号 1 ~ N,放在架子上。 比如有5个瓶子: 2 1 3 5 4 要求每次拿起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

分析:
使用选择排序: 保证每次交换都得到一个未排数中最小(或最大)的数

#include <iostream>
#include<iomanip>
using namespace std;
void swap(int *a, int *b) {
    int t = *a;
    *a = *b;
    *b = t;
}
int main()
{
    int n;
    int a[10000];
    int count = 0;
    cin >> n;
    for(int i = 0; i < n; i++) {
        cin >> a[i]; 
    }
    //cout<< "每次交换显示:"<<endl;
    for(int j = 0; j < n; j++ ) {
        int min = j;    // j为还没排的最小数序号 
        int i;
        for(i = j; i < n; i++) {    //检查是否序号min为还没排的最小数序号 
            if(a[min] > a[i]) {     //如果不是则交换序号 最终得到最小数序号 
                min = i;        
            }
        } 
        if(min != j) {  //交换
            swap(a[min], a[j]); 
            /*for(int look = 0; look < n; look++) {
                cout << setw(3) << a[look]; 
            }
            cout << endl;*/
            count ++; 
        }
    }
    cout << count ;
    return 0; 
}
目录
相关文章
|
负载均衡 Unix 应用服务中间件
深入解析HTTP反向代理:探索NGINX的神奇之处
深入解析HTTP反向代理:探索NGINX的神奇之处
|
存储 运维 Prometheus
微服务监控:确保分布式系统的可观察性与稳定性
微服务监控:确保分布式系统的可观察性与稳定性
|
数据处理 算法框架/工具 计算机视觉
手把手教你使用YOLOV5训练自己的目标检测模型
本教程由肆十二(dejahu)撰写,详细介绍了如何使用YOLOV5训练口罩检测模型,涵盖环境配置、数据标注、模型训练、评估与使用等环节,适合大作业及毕业设计参考。提供B站视频、CSDN博客及代码资源链接,便于学习实践。
5066 1
手把手教你使用YOLOV5训练自己的目标检测模型
|
关系型数据库 MySQL 应用服务中间件
Centos中查看nginx、apache、php、mysql配置文件路径
Centos中查看nginx、apache、php、mysql配置文件路径
2713 0
|
开发框架 监控 .NET
【Azure App Service】部署在App Service上的.NET应用内存消耗不能超过2GB的情况分析
x64 dotnet runtime is not installed on the app service by default. Since we had the app service running in x64, it was proxying the request to a 32 bit dotnet process which was throwing an OutOfMemoryException with requests >100MB. It worked on the IaaS servers because we had the x64 runtime install
215 5
|
Java 应用服务中间件 nginx
idea打war包时,JDK版本的问题解决方式
idea打war包时,JDK版本的问题解决方式
|
编译器 Go
Go 语言基础语法
Go 语言基础语法
188 1
|
存储 设计模式 算法
【C++ 并发 线程池设计】深入理解C++线程池:设计、实现与应用
【C++ 并发 线程池设计】深入理解C++线程池:设计、实现与应用
1095 0
|
人工智能 搜索推荐 程序员
自驱学习VS激励学习:探讨学习方式的选择
作为新时代青年,要时刻保持学习的心态,个人觉得学习对于每个人来说都有不同的含义和动力。有人认为学习是一项具有挑战性的任务,而另一些人则追求终身学习,活到老学到老。作为程序员,尤其是当前新技术日新月异,我们在面对新技术的冲击时,如何快速的学会新的技术成为了首要问题,而且学习方式的选择变得尤为重要。那么本文就来简单聊聊自驱学习和激励学习这两种方式,并从未来学习模式和知识掌握的角度来进行分享和讨论,欢迎大家在评论区留言交流。
266 2
自驱学习VS激励学习:探讨学习方式的选择