LQ0048 交换瓶子无标题

Posted 海岛Blog

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LQ0048 交换瓶子无标题相关的知识,希望对你有一定的参考价值。

题目来源:蓝桥杯2016初赛 C++ B组H题

题目描述
有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

问题分析
给解题程序代码,不解释。

AC的C语言程序如下:

/* LQ0048 交换瓶子 */

#include <stdio.h>
#include <string.h>

#define N 10000 + 1
int a[N], vis[N];

int main()

    int n;
    while (~scanf("%d", &n)) 
        for (int i = 1; i <= n; i++)
            scanf("%d", &a[i]);

        memset(vis, -1, sizeof vis);

        int cnt = 0;
        for (int i = 1; i <= n; i++)
            if (vis[i] == -1) 
                cnt++;
                for (int j = i; vis[j] == -1; j = a[j])
                    vis[j] = 1;
            

        printf("%d\\n", n - cnt);
    

    return 0;

以上是关于LQ0048 交换瓶子无标题的主要内容,如果未能解决你的问题,请参考以下文章

交换瓶子

交换瓶子_贪心

交换瓶子 --- 蓝桥杯 (暴力)

随手练——交换杯子

2016_B t9交换瓶子

2016_B t9交换瓶子