藍橋杯 2016 B組第九題 交換瓶子

<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;
}

比賽後寫的,感覺比賽時候想多了,一直在想着歸併排序求逆序,然而並不會歸併直接放棄了。現在感覺很簡單,直接讓每個瓶子去它該去的地方就可以了。 不知道現在這個對不對,如果不對還請指出。。。。。。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章