蓝桥杯省赛-交换瓶子
题目描述
有N个瓶子,编号 1 ~ N,放在架子上。
比如有5个瓶子:2 1 3 5 4,要求每次拿起2个瓶子,交换它们的位置。
经过若干次后,使得瓶子的序号为:1 2 3 4 5
对于这么简单的情况,显然,至少需要交换2次就可以复位。
如果瓶子更多呢?你可以通过编程来解决。
比如有5个瓶子:2 1 3 5 4,要求每次拿起2个瓶子,交换它们的位置。
经过若干次后,使得瓶子的序号为:1 2 3 4 5
对于这么简单的情况,显然,至少需要交换2次就可以复位。
如果瓶子更多呢?你可以通过编程来解决。
输入
输入存在多组测试数据,对于每组测试数据:
第一行: 一个正整数N(N<10000), 表示瓶子的数目
第二行:N个正整数,用空格分开,表示瓶子目前的排列情况。
第一行: 一个正整数N(N<10000), 表示瓶子的数目
第二行:N个正整数,用空格分开,表示瓶子目前的排列情况。
输出
对于每组测试数据输出一行,包含一个正整数表示答案
样例输入 Copy
5
3 1 2 5 4
5
5 4 3 2 1
样例输出 Copy
3
2
#include<iostream> using namespace std; const int N=10010; int a[N]; int main() { int n,i,j,k,temp; while(cin>>n) { for(i=1;i<=n;i++) { cin>>a[i]; } int res=0; for(i=1;i<=n;i++) { k=i; for(j=i;j<=n;j++) { if(a[j]<a[k]) { k=j; } } if(i!=k) { res++; temp=a[i]; a[i]=a[k]; a[k]=temp; } } cout<<res<<endl; } return 0; }

浙公网安备 33010602011771号