#80. 【列表】卡牌游戏(信息素养复赛真题)
【列表】卡牌游戏(信息素养复赛真题)
题目描述
有 张卡牌。第 张卡牌的位置是position[i]
。我们需要把所有卡牌移到同一个位置。在一步中,我们可以将第i张卡牌的位置从position[i]
改变位置,改变位置时需要消耗一定的代价:
1、position[i]+2
或 position[i]-2
,此时没有代价,即 cost=0
;或者,牌没有移动位置的话,也没有代价。
2、position[i]+1
或 position[i]-1
,此时的代价为cost=1
。
请注意,每张卡牌可以移动多次。
现给出所有卡牌的位置,请你编程输出将所有卡牌移动到同一位置上所需要最小代价。
例如,我们现在有这些卡牌及其位置。假设我们需要将所有卡牌移动到 位置。则,每张牌的代价分别是:
1、第一张牌连续移动9次,每次移动2格,代价为0;
2、第二张牌先连续移动8次2格,最后再移动1格,代价为1;
3、第三张牌先连续移动4次2格,最后再移动1格,代价为1;
4、第四张牌先连续移动12次2格,最后再移动1格,代价为1;
5、第五张牌连续移动24次2格,代价为0;
6、第六张牌先连续移动25次2格,最后再移动1格,代价为1;
7、第七张牌先连续移动39次2格,最后再移动1格,代价为1;
最终,将所有牌(7张牌)移动到位置20的总代价为5。
要求最小代价,则需要遍历所有可能的位置即可。
题目格式
输入
输入一行正整数,每个数字之间用空格隔开。
输出
输出将所有卡牌移动到同一位置上所需要的最小代价。
题目样例
1 2 3
1
题目解释
现在,有三张牌,三张牌的位置分别为1、2、3。可以容易想到,代码最小的情况是:将第一张牌从位置1移到位置3,代价为0;第三张牌位置不变,代价为0;第二张牌从位置2移到位置3,代价为1。