交换瓶子问题,有N个名字,编号为1~N,比如有5个瓶子,分别为2 1 3 5 4。要求每次拿起两个瓶子交换他们的位置,那么最少交换两次可以让顺序变为12345,现在由你输入瓶子数量和编码顺序,输出将顺序排好的最少交换次数。
不知道哪里错了,提交到蓝桥杯检测是错误的,请问哪里错了
#include<stdio.h>
#include<stdlib.h>
int main()
{
int n=0;
scanf("%d",&n);
int* a=(int*)malloc(n*sizeof(int));
for(int i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
int* b=(int*)malloc(n*sizeof(int));
for(int i=0;i<n;i++)
{
b[i]=i+1;
}
int key=0,kept=0,count=0,i=0;
while(i<n)
{
if(a[i]!=b[i])
{
key=a[i];
kept=a[key-1];
a[key-1]=b[key-1];
a[i]=kept;
count++;
}
i++;
}
printf("%d",count);
system("pause");
return 0;
}