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 交换瓶子无标题的主要内容,如果未能解决你的问题,请参考以下文章