JAVA:(金融风暴)

题目描述:

银行会互相借钱。在经济艰难时期,如果一个银行倒闭,它就不能偿还贷款。一个银行的总资产是它当前的余款减去它欠其他银行的贷款。下图就是五个银行的状况图。每个银行的当前余额分别是 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");
		else
			System.out.println();
	}
	
}

运行截图:

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值