本文主要是介绍网易2018校招(秋招)算法编程题之一-求经过K次操作的不稳定值及操作过程,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题目描述:
用一些立方体堆成一些塔
定义:不稳定值为这些塔中最高的塔和最低的塔的高度差
为了让这些塔尽量稳定,进行如下操作:每次从某座塔上取下一块立方体,并放到另一座塔上
注意:不能放到原塔上
输入描述:
第一行两个数n,k(1<=n<=100, 1<=k<=1000)表示塔的数量以及最多操作次数
第二行n个数,ai(1<=ai<=10^4)表示第i座塔的初始高度
输出描述:
第一行两个数s,m,表示最小的不稳定值和操作次数(m<=k)
接下来的m行,每行两个数x,y表示从第x座塔上取下一块立方体放到第y座塔上
示例:
输入
3 2
5 8 5
输出
0 2
2 1
2 3
思路:
先定义一个更新塔高度的函数,输入为所有塔的高度,输出为更新操作之后塔的高度,以及操作后的不稳定值,操作过程
再定义一个小于操作数的范围,去进行迭代更新,终止条件为不稳定值为0或者操作数等于允许最大操作数
代码如下:
# -*- coding:utf-8 -*-
import numpy as np
class Solution:### 迭代操作def Find(self, tower, values):# write code herea = np.zeros((values[1]))b = np.zeros((values[1]))for i in range(values[1]):tower, value, a[i], b[i] = s.update(tower)if value == 0:return i+1, value, a, breturn values[1], value, a, b### 更新塔高度 并返回更新操作之后塔的高度,以及操作后的不稳定值,操作过程def update(self, tower):maxinum = max(tower)mininum = min(tower)maxindex = tower.index(maxinum)minindex = tower.index(mininum)tower[maxindex], tower[minindex] = maxinum-1, mininum+1return tower, max(tower)-min(tower), maxindex, minindexwhile True:try:s = Solution()### 数据输入 与 处理values = input()tower = input()values = values.split(' ')tower = tower.split(' ')values[0], values[1] = eval(values[0]), eval(values[1])for i in range(values[0]):tower[i] = eval(tower[i])### 计算opra_num, num, x, y = s.Find(tower, values)### 输出print(num, opra_num)for i in range(opra_num):print((int(x[i])+1), (int(y[i])+1))except:break
这篇关于网易2018校招(秋招)算法编程题之一-求经过K次操作的不稳定值及操作过程的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!