第八章第十七题(金融风暴)(financial crisis)
-
***8.17(金融风暴)
***8.17(financial crisis)
-
参考代码:
package chapter08; import java.util.Arrays; import java.util.Scanner; public class Code_17 { public static void main(String[] args) { Scanner cin = new Scanner(System.in); int n = cin.nextInt(); double limit = cin.nextDouble(); double[][] borrower = new double[n][n]; double[] balance = new double[n]; double[] total = new double[n]; boolean[] mark = new boolean[n]; System.out.println("Enter the informations of banks:"); for(int i = 0; i < n; ++i) Arrays.fill(borrower[i], 0.0); //输入数据 for(int i = 0; i < n; ++i){ balance[i] = cin.nextDouble(); int cnt = cin.nextInt(); for(int j = 0; j < cnt; ++j){ int index = cin.nextInt(); borrower[i][index] = cin.nextDouble(); } } //假设都没放贷款的总资产 for(int i = 0; i < n; ++i){ total[i] = balance[i]; for(int j = 0; j < n; ++j){ total[i] += borrower[i][j]; } } Arrays.fill(mark,true); for(int i = 0; i < n; ++i){ if(total[i] < limit && mark[i]){ //把危险的借贷都剪掉 mark[i] = false; for(int j = 0; j < n; ++j){ borrower[j][i] = 0; } //重新计算总资产 for(int v = 0; v < n; ++v){ total[v] = balance[v]; for(int j = 0; j < n; ++j){ total[v] += borrower[v][j]; } } //从头开始检查 i = -1; } } System.out.print("Unsafe banks are "); for(int i = 0; i < n; ++i) if(!mark[i]) System.out.print(i + " "); } }
-
结果显示:
5 201 Enter the informations of banks: 25 2 1 100.5 4 320.5 125 2 2 40 3 85 175 2 0 125 3 75 75 1 0 125 181 1 2 125 Unsafe banks are 1 3 Process finished with exit code 0