当前位置:网站首页>笔试题:金额拆分
笔试题:金额拆分
2022-08-03 11:03:00 【Li Guogang】
问题1
使用JAVA代码实现,将完成后代码复制在HTML TAB下即可,不要使用其他语言!
【注意】
可支付用的账户不是给定case中的固定三个,可以支持任意多的账户;
能有面向对象的思维去解决问题;
核心逻辑是希望对给定的付款总金额和一批支付账户,给出本次付款使用哪些账户和对应每个账户的付款金额;
有良好的编码习惯;
有足够的测试用例;
【金额拆分】
假设有如下的付款场景:
给定本次付款总金额,从已有的账户中选择可支付金额足够的账户进行付款;
要求给出本次支付使用的账户和每个账号需要支付的金额;
case1:
输入:
付款金额:100
账号1剩余可支付金额: 80
账号2剩余可支付金额: 30
账号3剩余可支付金额: 20
输出:
账号1: 80
账号2: 20
case2:
输入:
付款金额:120
账号1剩余可支付金额: 80
账号2剩余可支付金额: 30
账号3剩余可支付金额: 20
输出:
账号1: 80
账号2: 30
账号2: 10
答案1
import java.util.Arrays;
import java.util.HashMap;
/** * 大都督 * 2022/8/2 16:35 **/
public class Test {
public static void main(String[] args) {
Double totalAmount = 120d;
Double[] accounts = {
80d, 30d, 20d};
System.out.println(test(totalAmount, accounts));
}
public static HashMap<String, Object> test(Double totalAmount, Double[] accounts) {
Double diff = totalAmount;
Arrays.sort(accounts, (o1, o2) -> o2.compareTo(o1));
HashMap<String, Object> result = new HashMap<>();
for (int i = 0; i < accounts.length; i++) {
if ((diff = diff - accounts[i]) > 0) {
result.put("账号" + (i + 1), accounts[i]);
} else if (diff == 0) {
break;
} else {
result.put("账号" + (i + 1), accounts[i] + diff);
break;
}
}
return result;
}
}
打印输出
边栏推荐
猜你喜欢
随机推荐
苏州大学:从PostgreSQL到TDengine
Fastjson反序列化
一文带你弄懂 CDN 技术的原理
完全背包问题的思路解析
MySQL database combat (1)
数据库一席谈:打造开源的数据生态,支撑产业数字化浪潮
Web Server 设置缓存响应字段的一些推荐方案
Machine Learning Overview
ABAB-740新语法
FR9811S6 SOT-23-6 23V,2A同步降压DC/DC转换器
MySQL - 2059 - Authentication plugin ‘caching_sha2_password‘ cannot be loaded
巴比特 | 元宇宙每日必读:玩家离场,平台关停,数字藏品市场正逐渐降温,行业的未来究竟在哪里?...
智能合约是什么?
像用户体验设计师一样思考
深度学习100例——卷积神经网络(CNN)实现服装图像分类
ARIMA实现(亲测可用)
如何通过DBeaver 连接 TDengine?
[Output each bit of an integer, from high to low.With and without recursion]
通过GBase 8c Platform安装数据库集群时报错
如何检索IDC研究报告?