题目描述
有 N个瓶子,编号 1 ~ N,放在架子上。
比如有 5 个瓶子:
2 1 3 5 4
要求每次拿起 2 个瓶子,交换它们的位置。
经过若干次后,使得瓶子的序号为:
1 2 3 4 5
对于这么简单的情况,显然,至少需要交换 2 次就可以复位。
如果瓶子更多呢?你可以通过编程来解决。
思路 :
按照数组下标进行排序,比较数组下标与其存储的数是否相同,如若不同则进行遍历找到与其下标对应的数字 两者进行交换
代码如下:
#include <stdio.h>
int main()
{
int n,i,j,k,sum=0;
scanf("%d",&n);
int a[10001];
for(i=1; i<=n; i++)
{
scanf("%d",&a[i]);
}
for(i=1; i<=n; i++)
{
if(a[i]!=i)
{
sum++;
for(j=0; j<n; j++)
{
if(a[j]==i)
{
break;
}
}
k=a[i];
a[i]=a[j];
a[j]=k;
}
}
printf("%d",sum);
return 0;
}
用例:
5 3 1 2 5 4
答案:
3