zoukankan      html  css  js  c++  java
  • 2016 I 交换瓶子

    有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
    5
    5 4 3 2 1

    样例输出 

    3
    2
    #include <bits/stdc++.h>
    using namespace std;
    int n;
    int a[10010];
    int main(){
        ios::sync_with_stdio(0);
        while(cin >> n){
            int ans = 0;
            for(int i = 1; i <= n; i++)
                cin >> a[i];
            for(int i = 1; i <= n; i++){
                while(i != a[i]){
                    //a[i]的位置不对,要找一个对的位置
                    //a[i]放在a[a[i]],一直找到合适的位置
                    swap(a[i],a[a[i]]);
                    ans++;
                }
            }
            cout << ans << endl;
        }
        return 0;
    }
     
  • 相关阅读:
    合并本地多次commit为一个commit
    git 取消文件跟踪
    遍历进程 遍历窗口
    linux查看程序运行参数
    ubuntu下载地址
    将博客搬至CSDN
    extern"C"的使用
    ESP32-NVS存储(非易失性存储库)
    ESP32-EEPROM存储
    c语言简单数据类型
  • 原文地址:https://www.cnblogs.com/xcfxcf/p/12713326.html
Copyright © 2011-2022 走看看