暴雪过后,蜗蜗国的公民们在排队领救济金,他们的编号依次为1到n,每个人都有一个想领的数额。本来已经队伍已经排好了,可是蜗蜗国的国王想让大家跑动一下,以免在寒风中被冻死。所以他让编号之和为k的每一对公民都交换一下位置,如果出现了需要自己和自己交换的情况,那就不改变位置。现在告诉你按照原本队伍的顺序,每个人想领救济金的数额,请你帮国王统计一下改变之后的救济金情况,并且按照队伍顺序输出救济金的金额。
时间: 2023-05-25 09:02:48 浏览: 147
队列(假设n个人编号1..n,他们按编号顺时针站成一圈)如n=5,m=3。1 2 3 4 5,最终输出是3 1 5 2 4。
5星 · 资源好评率100%
解题思路:
首先,我们需要思考,编号之和为 k 的一对公民会交换位置几次呢?根据实际情况,我们可以发现,每一对公民最多只会交换一次位置,因为交换过后,他们的编号之和就不再是 k 了。
那么,我们可以考虑把每一对需要交换位置的公民都提取出来,然后依次进行交换。最终的结果就是所有交换都完成时的队伍顺序。
具体步骤如下:
1. 构建一个数组 value 来保存每个人想领取救济金的数额,并且根据原队伍顺序依次初始化数组。
2. 遍历从 2 到 n 的所有编号之和为 k 的公民对,将他们的编号保存到一个数组 swap 中。
3. 对 swap 数组中的每一对公民,交换他们在 value 数组中的位置。
4. 交换所有需要交换的公民之后,输出 value 数组中的元素,即为最终队伍顺序对应的救济金数额。
代码实现:
阅读全文