(一)杂题—简单计算与模拟

付账问题

本题求的是如何付款使方差最小,方差意味着一组数据的平稳程度,直接思路是这n个人,如果带的钱不够平均数,需要把钱全部付掉,那后一部分人,如何付款让方差最小?依然是带钱相对少的多付,相对多的少付的原则。

步骤:

对ai进行排序,

前一部分人带的钱不够,需要从总付款数S中扣掉他们的钱,得到剩余付款数S',

在剩余这部分人中,部分人带钱达不到平均数avg',需要他们全部付款,

剩下那部分带钱多的,不管怎么摊他都有富余,所以对于这部分人,付款数是剩余付款数平摊。

解答代码如下:

其中有几个细节提一下,

我们通过S<=a[i]*(n-i)来判断第i个人带的钱是否达到平均数avg,

题目规定n≤5×10^5,0≤ai≤10^9 ,2的10次幂约等于10的3次幂,2的32次幂约等于10的9次幂所以用int定义n,long定义存放ai的数组a,

Math.pow(n,m) 求n的m次方

Math.sqrt(n) 求算数平方根

System.out.println(String.format("%.4f", Math.sqrt(ans/n)));

也可以写成System.out.printf("%.4f", Math.sqrt(ans/n));

%f 表示接受一个数字并将其转化为浮点数格式

%d 表示接受一个数字并将其转化为有符号的整数格式

%.4f代表小数点后面有4位小数的浮点数。第二个例子%02d代表以固定的两位显示十进制数,不足的前面补0。而%2d前面没有指定0,不足两位时会以空白补足

成绩统计

Math.round()表示把数字四舍五入后保留整数,

Math.ceil()表示向上取整,不会自动转成整形,需要int强转

Math.floor()表示向下取整,不会自动转成整形,需要int强转

jige和youxiu两个变量需要定义成double再做除法计算

纸张大小

 

 注意:substring  不是subString

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值