P8637 [蓝桥杯 2016 省 B] 交换瓶子 - 洛谷
标题描述
有 N 个瓶子,编号 1∼N,放在架子上。
好比有 5 个瓶子:
markdow
要求每次拿起 2 个瓶子,交换它们的位置。
颠末若干次后,使得瓶子的序号为:
markdown
对于这么简单的情况,显然,至少需要交换 2 次就可以复位。
如果瓶子更多呢?你可以通过编程来解决。
输入格式
第一行:一个正整数 N(N<10000),表示瓶子的数目。
第二行:N 个正整数,用空格分开,表示瓶子目前的排列情况。
输出格式
输出数据为一行一个正整数,表示至少交换多少次,才能完成排序。
输入输出样例
输入 #1
markdown
输出 #1
markdown
输入 #2
markdown
输出 #2
markdown
分析/提示
时限 1 秒,256M。蓝桥杯 2016 年第七届省赛
蓝桥杯 2016 年省赛 B 组 I 题。
思路:
直接模拟从第一个到最后一个,是否与精确的答案相同,不是就翻转i和i+1
代码如下:
- #include<iostream>
- #include<algorithm>
- #include<vector>
- using namespace std;
- const int N = 1e5+10;
- int a[N],n,cnt;
- int main()
- {
- ios::sync_with_stdio(0);
- cin.tie(0);
- cout.tie(0);
- cin >> n;
- for(int i = 1 ; i <= n ; i++)
- {
- cin >> a[i];
- }
- for(int i = 1 ; i <= n ; i++)
- {
- if(a[i] != i)
- {
- for(int j = i ; j <= n ; j++)
- {
- if(a[j] == i)
- {
- swap(a[i],a[j]);
- cnt++;
- }
- }
- }
- }
- cout << cnt;
- return 0;
- }
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |