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

18 篇文章 0 订阅
16 篇文章 0 订阅
<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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值