题目描述:

银行会互相借钱。在经济艰难时期,如果一个银行倒闭,它就不能偿还贷款。一个银行的总资产是它当前的余款减去它欠其他银行的贷款。下图就是五个银行的状况图。每个银行的当前余额分别是 2500 万美元、1 亿 2500 万美元、1 亿 7500 万美元、7500 万美元和 1 亿 8100 万美元。从节点 1 到节点 2 的方向的边表示银行 1 借给银行 2共计 4 千万美元。

如果银行的总资产在某个限定范围以下,那么这个银行就是不安全的。它借的钱就不能返还给借贷方,而且这个借贷方也不能将这个贷款算入它的总资产。因此,如果借贷方总资产在限定范围以下,那么它也不安全。编写程序,找出所有不安全的银行。程序如下读取输入。它首先读取两个整数 n 和 limit,这里的 n 表示银行个数,而 limit 表示要保持银行安全的最小总资产。然后,程序会读取描述 n 个银行的 n 行信息,银行的 id 从0 到 n-1。每一行的第一个数字都是银行的余额,第二个数字表明从该银行借款的银行,其余的就都是两个数字构成的数对。每对都描述一个借款方。每一对数字的第一个数就是借款方的 id,第二个数就是所借的钱数。例如,在上图中五个银行的输入如下所示(注意:limit 是 201):

银行 3 的总资产是 75+125,这个数字是在 201 以下的。所以,银行 3 是不安全的。在银行 3 变得不安全之后,银行 1 的总资产也降为125+40。所以,银行 1 也不安全。程序的输出应该是:
Unsafe banks are 3 1
提示:使用一个二维数组 borrowers 来表示贷款。borrowers[i][j]表明银行 i 贷款给银行 j的贷款额。一旦银行:j 变得不安全,那么 borrowers[i][j]就应该设置为 0。

代码:


import java.util.Scanner;public class Test30 {static Scanner in = new Scanner(System.in);public static void main(String[] args) {int bank_number = in.nextInt();                              //银行数量double limit = in.nextDouble();                              //限定资金double[][] borrowers = new double[bank_number][bank_number]; //贷款数组double[] total_assets = new double[bank_number];             //总资产double[] balance = new double[bank_number];                   //余额数组inputBanksInformations(balance,borrowers);computeTotalAssets(total_assets,balance,borrowers,limit);printUnsafeBanks(total_assets,limit);in.close();}//输入银行信息public static void inputBanksInformations(double[] balance,double[][] borrowers) {for(int i = 0; i < balance.length; i++){balance[i] = in.nextDouble();int borrowers_number = in.nextInt();for(int j = 0; j < borrowers_number; j++)borrowers[i][in.nextInt()] = in.nextDouble();}}//计算银行总资产public static void computeTotalAssets(double[] total_assets,double[] balance,double[][] borrowers,double limit){int[] flag = new int[total_assets.length];for(int num = 0; num < total_assets.length; num++){for(int i = 0; i < total_assets.length; i++){total_assets[i] = balance[i];for(int j = 0; j < borrowers[i].length; j++)total_assets[i] += borrowers[i][j];}for(int i = 0; i < total_assets.length; i++){if(total_assets[i] < limit && flag[i] != 1){total_assets[i] = 0;for(int j = 0; j < total_assets.length; j++)borrowers[j][i] = 0;flag[i] = 1;}}}}//打印不安全的银行public static void printUnsafeBanks(double[] total_assets,double limit){int flag = 0;System.out.print("Unsafe banks are ");for(int i = 0; i < total_assets.length; i++){if(total_assets[i] < limit){System.out.print(i+" ");flag = 1;}}if(flag == 0)System.out.println("No bank is unsafe");elseSystem.out.println();}}

运行截图:

JAVA:(金融风暴)相关推荐

  1. Java黑皮书课后题第8章:**8.17(金融风暴)银行会互相借款……银行的总资产是它当时的余款减去它欠其他银行的贷款。如果一个银行的总资产在某个限以下,那么这个银行是不安全的。编写程序,找出所有不安

    **8.17(金融风暴)银行会互相借款--银行的总资产是它当时的余款减去它欠其他银行的贷款.如果一个银行的总资产在某个限以下,那么这个银行是不安全的.编写程序,找出所有不安全银行 题目 题目描述 破题 ...

  2. springboot实现SSE服务端主动向客户端推送数据,java服务端向客户端推送数据,kotlin模拟客户端向服务端推送数据

    SSE服务端推送 服务器向浏览器推送信息,除了 WebSocket,还有一种方法:Server-Sent Events(以下简称 SSE).本文介绍它的用法. 在很多业务场景中,会涉及到服务端向客户端 ...

  3. Java 获取当前时间之后的第一个周几,java获取当前日期的下一个周几

    Java 获取当前时间之后的第一个周几,java获取当前日期的下一个周几 //获得入参的日期 Calendar cd = Calendar.getInstance(); cd.setTime(date ...

  4. 在k8s中使用gradle构建java web项目镜像Dockerfile

    在k8s中使用gradle构建java web项目镜像Dockerfile FROM gradle:6-jdk8 AS build COPY --chown=gradle:gradle . /home ...

  5. Java | kotlin 手动注入bean,解决lateinit property loginService has not been initialized异常

    kotlin.UninitializedPropertyAccessException: lateinit property loginService has not been initialized ...

  6. SpringBoot项目使用nacos,kotlin使用nacos,java项目使用nacos,gradle项目使用nacos,maven项目使用nacos

    SpringBoot项目使用nacos kotlin demo见Gitte 一.引入依赖 提示:这里推荐使用2.2.3版本,springboot与nacos的依赖需要版本相同,否则会报错. maven ...

  7. OpenAPI使用(swagger3),Kotlin使用swagger3,Java使用swagger3,gradle、Maven使用swagger3

    OpenAPI使用(swagger3) demo见Gitte 一.背景及名词解释 OpenAPI是规范的正式名称.规范的开发工作于2015年启动,当时SmartBear(负责Swagger工具开发的公 ...

  8. Gradle错误提示:Java home supplied via ‘xxx.xxx.xxx‘ is invalid

    Gradle错误提示:Java home supplied via 'org.gradle.java.home' is invalid 描述:在使用idea采用gradle进行依赖的管理功能,当想切换 ...

  9. 查看Hotspot源码,查看java各个版本源码的网站,如何查看jdk源码

    java开发必知必会之看源码,而看源码的第一步则是找到源码

最新文章

  1. 鸿蒙系统今日发布 中国人自己的操作系统,鸿蒙系统今日发布,中国人自己的操作系统...
  2. 由于c语言是由字符流组成的,C语言试题及答案
  3. 【客户下单】前端系统Action数据封装
  4. 360网络修复工具_Win10网络图标不见了解决方法
  5. oracle迁移到greenplum的方案
  6. DM入门之Apriori小结
  7. java map清除值为null的元素_Java中的集合框架大总结
  8. Code Sinppet
  9. C++ new和malloc区别
  10. Windows10 Virtualization Technology虚拟化技术功能
  11. java矩形碰撞检测_JS/HTML5游戏常用算法之碰撞检测 包围盒检测算法详解【矩形情况】...
  12. 《你必须知道的.NET》读书实践:一个基于OO的万能加载器的实现
  13. 课题申报书范文_课题申请书范例
  14. QQ游戏基本通信机制(QQ游戏外挂编写)
  15. 最近非常火的电子木鱼流量主小程序源码
  16. 解决easyui combobox赋值boolean类型的值时,经常出现的内容显示的value而不是text的bug...
  17. Linux基础学习总结,入门
  18. oracle 客户端 sqlplus 命令行 问号 乱码
  19. FreeRTOSMini
  20. python逻辑运算符的优先级_Python逻辑运算符

热门文章

  1. 安利推荐logo设计神器
  2. php实现共享单车地图定位,基于SensorTag实现共享单车实时位置追踪,蓝牙智能定位...
  3. 云计算学习素材框架,msyql查询操作课件
  4. 得实Dascom AR-430K 打印机驱动
  5. Python根据输入的公司编号、名称、网址,格式化输出公司信息。其中1)冒号统一为英文冒号,编号占6位,不足6位的前面补0。编号后面是制表符。
  6. 局域网中无法访问的解决方法
  7. 用牛顿迭代公式求 x 的立方根(c语言)
  8. php bom头 emeditor,利用Emeditor转换文件的编码格式
  9. android6有个旧版DHCP客户端,哪里来的dhcp客户端?
  10. Eclipse中已安装的插件如何卸载