首页 > 试题广场 >

拼凑正方形

[编程题]拼凑正方形
  • 热度指数:6969 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 64M,其他语言128M
  • 算法知识视频讲解
牛牛有4根木棍,长度分别为a,b,c,d。羊羊家提供改变木棍长度的服务,如果牛牛支付一个硬币就可以让一根木棍的长度加一或者减一。牛牛需要用这四根木棍拼凑一个正方形出来,牛牛最少需要支付多少硬币才能让这四根木棍拼凑出正方形。

输入描述:
输入包括一行,四个整数a,b,c,d(1 ≤ a,b,c,d ≤ 10^6), 以空格分割


输出描述:
输出一个整数,表示牛牛最少需要支付的硬币
示例1

输入

4 1 5 4

输出

4
l = list(map(int, input().split()))
l.sort()
m =((l[2])+(l[1]))//2
n = abs(m-l[0])+abs(m-l[1])+abs(m-l[2])+abs(m-l[3])
print(n)

平均绝对误差最小就是中位数
此题正方形边长就是中位数
发表于 2019-05-23 08:55:48 回复(3)
x = list(map(int, input().split()))
x.sort()
print(x[-1]+x[-2]-x[0]-x[1])

发表于 2019-04-09 12:13:38 回复(0)
arr=list(map(int,input().split()))
pay=[]
for i in range(min(arr),max(arr)+1):
    sum=0
    for j in range(4):
        sum+=abs(arr[j]-i)
    pay.append(sum)
print(min(pay))

发表于 2019-03-22 21:45:33 回复(1)
s = list(map(int, input().split()))
s.sort() print(sum([abs(s[2] - s[i]) for i in range(4)]))
发表于 2019-03-19 20:11:26 回复(0)

python两行解法

arr = sorted(map(int, input().split()))
print(arr[3] + arr[2] - arr[1] - arr[0])

根据数学推导:

  • 最长的那根木棍和最短的那根,最终要达到相同的长度,那么中间要进行len(max) - len(min)次操作。
  • 第二长的那根木棍和第二短的那根,最终要达到相同的长度,中间要进行len(max2) - len(min2) 次操作。

所以总共要进行len(max) + len(max2) - len(min2)- len(min)次操作

发表于 2019-02-24 19:02:20 回复(7)
## 本题核心在于找中位数
inp = [int(x) for x in input().split()]
inp.sort()
n = len(inp)
mid_num = inp[n//2]
min_pay = 0
for i in range(n):
    min_pay += abs(inp[i] - mid_num)
print(min_pay)

发表于 2019-02-16 10:28:15 回复(0)