题目
1、题目描述
你的任务是为一个很受欢迎的银行设计一款程序,以自动化执行所有传入的交易(转账,存款和取款)。银行共有 n 个账户,编号从 1 到 n 。每个账号的初始余额存储在一个下标从 0 开始的整数数组 balance 中,其中第 (i + 1) 个账户的初始余额是 balance[i] 。
请你执行所有 有效的 交易。如果满足下面全部条件,则交易 有效 :
指定的账户数量在 1 和 n 之间,且取款或者转账需要的钱的总数 小于或者等于 账户余额。
- 实现 Bank 类:
Bank(long[] balance) 使用下标从 0 开始的整数数组 balance 初始化该对象。
boolean transfer(int account1, int account2, long money) 从编号为 account1 的账户向编号为 account2 的账户转帐 money 美元。如果交易成功,返回 true ,否则,返回 false 。
boolean deposit(int account, long money) 向编号为 account 的账户存款 money 美元。如果交易成功,返回 true ;否则,返回 false 。
boolean withdraw(int account, long money) 从编号为 account 的账户取款 money 美元。如果交易成功,返回 true ;否则,返回 false 。
2、原题链接
解题报告
1、解题思路
模拟题
2、解题方法
模拟
2、代码详解
typedef struct {
long long *value;
int size;
} Bank;
Bank* bankCreate(long long* balance, int balanceSize) {
Bank *obj = (Bank*)malloc(sizeof(Bank));
int byteSize = sizeof(long long) * balanceSize;
obj->value = (long long*)malloc(byteSize);
obj->size = balanceSize;
memcpy(obj->value, balance, byteSize);
return obj;
}
bool bankTransfer(Bank* obj, int account1, int account2, long long money) {
if(obj->size < account1 || obj->size < account2 || money > obj->value[account1-1]){
return false;
}
obj->value[account1-1] -= money;
obj->value[account2-1] += money;
return true;
}
bool bankDeposit(Bank* obj, int account, long long money) {
if(obj->size < account){
return false;
}
obj->value[account-1] += money;
return true;
}
bool bankWithdraw(Bank* obj, int account, long long money) {
if(obj->size < account || obj->value[account-1] < money){
return false;
}
obj->value[account-1] -= money;
return true;
}
void bankFree(Bank* obj) {
free(obj);
}
/**
* Your Bank struct will be instantiated and called as such:
* Bank* obj = bankCreate(balance, balanceSize);
* bool param_1 = bankTransfer(obj, account1, account2, money);
* bool param_2 = bankDeposit(obj, account, money);
* bool param_3 = bankWithdraw(obj, account, money);
* bankFree(obj);
*/
总结
水题