首页 > 试题广场 >

发放贷款

[编程题]发放贷款
  • 热度指数:490 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
迫于房价的压力,很多人选择了向银行贷款。假设银行有n万元资金可供贷款,他会根据申请的顺序,依次初次符合要求的申请。
例如,银行有10万元,A、B、C三个人分别贷款5万、8万和3万。
1. 按照顺序,先批准A的申请;
2. 此时银行剩余5万,达不到B的申请要求,因此这一批不处理B的申请;
3. C的申请能被满足,因此批准C。
等A和C偿还了贷款后,银行会发放第二批的贷款,此时B的申请就能被批准。因此,整个处理过程是A、C、B。
现在给你所需的信息,请输出银行批准贷款的顺序。

输入描述:
输入包含多组数据,每组数据第一行包含两个正整数m(1≤m≤50)和n(1≤n≤100),代表有m个人申请贷款,以及银行的资金有n万元。

紧接着m行,每行包含一个字符串name(仅由字母组成,长度不超过16个字符)和整数金额amount(1≤amount≤n),代表申请人的姓名和申请贷款的金额。


输出描述:
对应每一组数据,按照申请被处理的顺序依次输出申请人的姓名。

每组数据之后输出一个空行作为分隔。
示例1

输入

3 10
A 5
B 8
C 3

输出

A
C
B
import java.util.*;
public class Main {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		while (sc.hasNext()) {
			int m = sc.nextInt();
			int n = sc.nextInt();
			People[] p = new People[m];
			for (int i = 0; i < m; i ++ ) {
				p[i] = new People(sc.next(), sc.nextInt(), false);
			}
			int count = 0;
			int money = n;
			while (count < m) {
				for (int i = 0; i < m; i ++ ) {
					if( ! p[i].flag && p[i].need <= money) {
						money -= p[i].need;
						p[i].flag = true;
						count ++ ;
						System.out.println(p[i].name);
					}
				}
				money = n;
			}
			System.out.println();
		}
	}
	static class People {
		String name;
		int need;
		boolean flag;
		public People(String name, int need, boolean flag) {
			this.name = name;
			this.need = need;
			this.flag = flag;
		}
	}
}

发表于 2016-10-13 18:18:11 回复(0)