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