2018校招真题牛客网练习

博客围绕一道校招真题展开,题目是牛牛有4根长度分别为a、b、c、d的木棍,羊羊家可改变木棍长度,支付一个硬币能让木棍长度加一或减一,需用这四根木棍拼正方形,求最少支付硬币数,还提及了题目分析思路。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目描述

牛牛有4根木棍,长度分别为a,b,c,d。羊羊家提供改变木棍长度的服务,如果牛牛支付一个硬币就可以让一根木棍的长度加一或者减一。牛牛需要用这四根木棍拼凑一个正方形出来,牛牛最少需要支付多少硬币才能让这四根木棍拼凑出正方形。

输入描述:

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

输出描述:

输出一个整数,表示牛牛最少需要支付的硬币

 题目分析:

可以设要找边长为x,设四个木棍根据长度由小到大为a1,a2,a3,a4。那么可以得到目标函数f(x),显然f(x)越小,就是我们所求。

f(x)=\left | a1 -x\right |+\left | a2 -x\right |+\left | a3 -x\right |+\left | a4 -x\right |

 显然 x\in [\left a1,a4 \right ]

分类讨论显然有$f(x)_{min}$=a3+a4-a1-a2

当然可以用循环来做,不过显然这种方法简单干脆。

list1=[]
for x in input().split(" "):
    list1.append(int(x))
list1 = sorted(list1)
result1=list1[3]+list1[2]-list1[1]-list1[0]
print(result1)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值