生成一段暴雪过后,蜗蜗国的公民们在排队领救济金,他们的编号依次为1到n,每个人都有一个想领的数额。本来已经队伍已经排好了,可是蜗蜗国的国王想让大家跑动一下,以免在寒风中被冻死。所以他让编号之和为k的每一对公民都交换一下位置,如果出现了需要自己和自己交换的情况,那就不改变位置。现在告诉你按照原本队伍的顺序,每个人想领救济金的数额,请你帮国王统计一下改变之后的救济金情况,并且按照队伍顺序输出救济金的金额。这题的c++代码
时间: 2023-05-25 07:02:50 浏览: 293
暴雪过后,蜗蜗国的公民们在排队领救济金,他们的编号依次为1到n,每个人都有一个想领的数额。本来已经队伍已经排好了,可是蜗蜗国的国王想让大家跑动一下,以免在寒风中被冻死。所以他让编号之和为k的每一对公民都交换一下位置,如果出现了需要自己和自己交换的情况,那就不改变位置。现在告诉你按照原本队伍的顺序,每个人想领救济金的数额,请你帮国王统计一下改变之后的救济金情况,并且按照队伍顺序输出救济金的金额。
输入格式:
第一行包含两个整数n和k,分别表示公民数量和编号之和。
第二行包含n个整数,表示每个公民想领的救济金数额。
输出格式:
按照队伍顺序输出每个公民领取的救济金数额。
C++代码如下:
相关问题
生成一段暴雪过后,蜗蜗国的公民们在排队领救济金,他们的编号依次为1到n,每个人都有一个想领的数额。本来已经队伍已经排好了,可是蜗蜗国的国王想让大家跑动一下,以免在寒风中被冻死。所以他让编号之和为k的每一对公民都交换一下位置,如果出现了需要自己和自己交换的情况,那就不改变位置。现在告诉你按照原本队伍的顺序,每个人想领救济金的数额,请你帮国王统计一下改变之后的救济金情况,并且按照队伍顺序输出救济金的金额。这题的代码
思路比较简单,就是按照题意逐个交换位置,然后统计每个人的救济金。具体实现可以使用一个数组来存储每个人的救济金,然后利用循环交换每一对编号之和为k的公民的位置,最后再按照队伍顺序输出救济金即可。
下面是Python代码实现:
n, k = map(int, input().split())
aid = list(map(int, input().split()))
money = [0] * (n + 1) # 存储每个人的救济金
for i in range(1, n+1):
money[i] = aid[i-1] # 将每个人的想领救济金存储到money数组中
for i in range(1, n+1):
for j in range(i+1, n+1):
if i + j == k + 1: # 找到需要交换的两个位置
tmp = money[i]
money[i] = money[j]
money[j] = tmp
for i in range(1, n+1):
print(money[i], end=' ') # 按照队伍顺序输出救济金
暴雪过后,蜗蜗国的公民们在排队领救济金,他们的编号依次为1到n,每个人都有一个想领的数额。本来已经队伍已经排好了,可是蜗蜗国的国王想让大家跑动一下,以免在寒风中被冻死。所以他让编号之和为k的每一对公民都交换一下位置,如果出现了需要自己和自己交换的情况,那就不改变位置。现在告诉你按照原本队伍的顺序,每个人想领救济金的数额,请你帮国王统计一下改变之后的救济金情况,并且按照队伍顺序输出救济金的金额。
思路:对于每对需要交换的公民,可以将它们对应的数额进行交换,最终得到改变之后的数额。可以先计算出每个位置要交换到的位置,然后根据交换规则进行数额的交换。
具体实现:
1. 计算每个位置要交换到的位置,可以使用一个数组pos,其中pos[i]表示编号为i的公民经过交换后要交换到的位置。如果k是偶数,那么pos[i]=(i+k/2)%n,即将编号之和为k的一对公民排在队伍前后两端;如果k是奇数,那么需要将后面多出来的那个公民向前移一个,所以pos[i]=(i+(k-1)/2+1)%n。
2. 根据交换规则进行数额的交换。从1号公民开始,对于每个公民i,如果pos[i]!=i,那么就将i和pos[i]对应的数额进行交换。需要用一个flag数组来标记每个位置是否已经被更改过,避免重复交换。
3. 最后按照队伍顺序输出救济金的金额即可。
代码实现如下:
阅读全文