蓝桥杯 2016 B组第九题 交换瓶子

来源:互联网 发布:centos 配置hadoop 编辑:程序博客网 时间:2024/06/05 01:59
<span style="color: rgb(51, 51, 51); font-size: 14px; line-height: 1.5; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;">有N个瓶子,编号 1 ~ N,放在架子上。</span><br style="color: rgb(51, 51, 51); font-size: 14px; line-height: 21px; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;" /><span style="color: rgb(51, 51, 51); font-size: 14px; line-height: 21px; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;">比如有5个瓶子:</span><br style="color: rgb(51, 51, 51); font-size: 14px; line-height: 21px; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;" /><span style="color: rgb(51, 51, 51); font-size: 14px; line-height: 21px; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;">2 1 3 5 4</span><br style="color: rgb(51, 51, 51); font-family: 微软雅黑; font-size: 14px; line-height: 21px; background-color: inherit;" /><span style="color: rgb(51, 51, 51); font-size: 14px; line-height: 21px; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;">要求每次拿起2个瓶子,交换它们的位置。</span><br style="color: rgb(51, 51, 51); font-size: 14px; line-height: 21px; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;" /><span style="color: rgb(51, 51, 51); font-size: 14px; line-height: 21px; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;">经过若干次后,使得瓶子的序号为:</span><br style="color: rgb(51, 51, 51); font-size: 14px; line-height: 21px; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;" /><span style="color: rgb(51, 51, 51); font-size: 14px; line-height: 21px; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;">1 2 3 4 5</span><br style="color: rgb(51, 51, 51); font-size: 14px; line-height: 21px; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;" /><span style="color: rgb(51, 51, 51); font-size: 14px; line-height: 21px; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;">对于这么简单的情况,显然,至少需要交换2次就可以复位。</span><br style="color: rgb(51, 51, 51); font-family: 微软雅黑; font-size: 14px; line-height: 21px; background-color: inherit;" /><span style="color: rgb(51, 51, 51); font-size: 14px; line-height: 21px; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;">如果瓶子更多呢?你可以通过编程来解决。</span><br style="color: rgb(51, 51, 51); font-family: 微软雅黑; font-size: 14px; line-height: 21px; background-color: inherit;" /><span style="color: rgb(51, 51, 51); font-size: 14px; line-height: 21px; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;">输入格式为两行:</span><br style="color: rgb(51, 51, 51); font-size: 14px; line-height: 21px; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;" /><span style="color: rgb(51, 51, 51); font-size: 14px; line-height: 21px; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;">第一行: 一个正整数N(N<10000), 表示瓶子的数目</span><br style="color: rgb(51, 51, 51); font-size: 14px; line-height: 21px; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;" /><span style="color: rgb(51, 51, 51); font-size: 14px; line-height: 21px; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;">第二行:N个正整数,用空格分开,表示瓶子目前的排列情况。</span><br style="color: rgb(51, 51, 51); font-family: 微软雅黑; font-size: 14px; line-height: 21px; background-color: inherit;" /><span style="color: rgb(51, 51, 51); font-size: 14px; line-height: 21px; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;">输出数据为一行一个正整数,表示至少交换多少次,才能完成排序。</span><br style="color: rgb(51, 51, 51); font-family: 微软雅黑; font-size: 14px; line-height: 21px; background-color: inherit;" /><span style="color: rgb(51, 51, 51); font-size: 14px; line-height: 21px; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;">例如,输入:</span><br style="color: rgb(51, 51, 51); font-size: 14px; line-height: 21px; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;" /><span style="color: rgb(51, 51, 51); font-size: 14px; line-height: 21px; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;">5</span><br style="color: rgb(51, 51, 51); font-size: 14px; line-height: 21px; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;" /><span style="color: rgb(51, 51, 51); font-size: 14px; line-height: 21px; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;">3 1 2 5 4</span><br style="color: rgb(51, 51, 51); font-family: 微软雅黑; font-size: 14px; line-height: 21px; background-color: inherit;" /><span style="color: rgb(51, 51, 51); font-size: 14px; line-height: 21px; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;">程序应该输出:</span><br style="color: rgb(51, 51, 51); font-size: 14px; line-height: 21px; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;" /><span style="color: rgb(51, 51, 51); font-size: 14px; line-height: 21px; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;">3</span><br style="color: rgb(51, 51, 51); font-family: 微软雅黑; font-size: 14px; line-height: 21px; background-color: inherit;" /><span style="color: rgb(51, 51, 51); font-size: 14px; line-height: 21px; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;">再例如,输入:</span><br style="color: rgb(51, 51, 51); font-size: 14px; line-height: 21px; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;" /><span style="color: rgb(51, 51, 51); font-size: 14px; line-height: 21px; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;">5</span><br style="color: rgb(51, 51, 51); font-size: 14px; line-height: 21px; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;" /><span style="color: rgb(51, 51, 51); font-size: 14px; line-height: 21px; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;">5 4 3 2 1</span><br style="color: rgb(51, 51, 51); font-family: 微软雅黑; font-size: 14px; line-height: 21px; background-color: inherit;" /><span style="color: rgb(51, 51, 51); font-size: 14px; line-height: 21px; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;">程序应该输出:</span><br style="color: rgb(51, 51, 51); font-size: 14px; line-height: 21px; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;" /><p><span style="color: rgb(51, 51, 51); font-size: 14px; line-height: 21px; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;">2</span></p>
</pre><pre name="code" class="cpp">
#include<iostream>using namespace std;void swap(int a,int b,int *data)//交换坐标 a b{int temp = data[a];data[a] = data[b];data[b] = temp;}void slove(int *data,int N){int cnt = 0;for (int i = 1; i <= N; ++i){while (data[i] != i){int state = data[i];//data[i]应该去的位置swap(state,i,data);cnt++;}}cout << cnt << endl;}int main(){int N;cin >> N;int *data = new int[N + 1];for (int i = 1; i < N + 1; ++i){cin >> data[i];}slove(data, N);return 0;}

比赛后写的,感觉比赛时候想多了,一直在想着归并排序求逆序,然而并不会归并直接放弃了。现在感觉很简单,直接让每个瓶子去它该去的地方就可以了。 不知道现在这个对不对,如果不对还请指出。。。。。。



0 0
原创粉丝点击