zoukankan      html  css  js  c++  java
  • [蓝桥杯2016初赛]交换瓶子

    题目描述

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

    输入

    输入存在多组测试数据,对于每组测试数据:
    第一行: 一个正整数N(N<10000), 表示瓶子的数目
    第二行:N个正整数,用空格分开,表示瓶子目前的排列情况。

    输出

    对于每组测试数据输出一行,包含一个正整数表示答案

    样例输入 Copy

    5
    3 1 2 5 4
    5
    5 4 3 2 1

    样例输出 Copy

    3
    2

    题解:

    按顺序遍历每个位置,放入应该放的瓶子即可

     
    #include<iostream>
    #include<algorithm>
    using namespace std;
    int a[20005];
    int main()
    {
        int n;
        while(cin>>n)
        {
            for(int i=1;i<=n;i++)
                cin>>a[i];
            
            int cnt=0;
            for(int i=1;i<=n;i++)
            {
                if(a[i]==i)
                    continue;
                else
                {
                    int pos;
                    for(int j=1;j<=n;j++)//找位置
                        if(a[j]==i)
                        {
                            pos=j;
                            break;
                        }
                    int temp=a[i];
                    a[i]=a[pos];
                    a[pos]=temp;
                    cnt++;
                }
            }
            cout<<cnt<<endl;
        }
        return 0;
    }
           
  • 相关阅读:
    js正则表达式中的问号使用技巧总结
    380. Insert Delete GetRandom O(1)
    34. Find First and Last Position of Element in Sorted Array
    162. Find Peak Element
    220. Contains Duplicate III
    269. Alien Dictionary
    18. 4Sum
    15. 3Sum
    224. Basic Calculator
    227. Basic Calculator II
  • 原文地址:https://www.cnblogs.com/-citywall123/p/12309508.html
Copyright © 2011-2022 走看看