题目
2043.简易银行系统
题目大意
你的任务是为一个很受欢迎的银行设计一款程序,以自动化执行所有传入的交易(转账,存款和取款)。银行共有 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
。
样例
数据规模
思路
模拟题,根据题意模拟即可,需要注意边界情况。
-
Bank(vector<long long>& balance)
函数:将balance
的元素逐一加到数组vector<ll>a
中。或者:
Bank(vector<long long>& balance) : balance(balance) {}
-
bool transfer(int account1, int account2, long long money)
函数:首先要判断两个账户是否真实存在:if(account1>a.size()||account2>a.size())return false
(这里vector
中的元素下标从 1 1 1开始,首部用 0 0 0填充),然后判断account1
余额是否足够,再进行转账。 -
bool deposit(int account, long long money)
函数:首先要判断账户是否真实存在:if(account>a.size())return false
,然后再进行余额增加操作。 -
bool withdraw(int account, long long money)
函数:首先要判断账户是否真实存在:if(account>a.size())return false
,然后再进行余额减少操作,注意余额足够才可以减少。
代码
// short int long float double bool char string void
// array vector stack queue auto const operator
// class public private static friend extern
// sizeof new delete return cout cin memset malloc
// relloc size length memset malloc relloc size length
// for while if else switch case continue break system
// endl reverse sort swap substr begin end iterator
// namespace include define NULL nullptr exit equals
// index col row arr err left right ans res vec que sta
// state flag ch str max min default charray std
// maxn minn INT_MAX INT_MIN push_back insert
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int, int>PII;
typedef pair<int, string>PIS;
const int maxn=1e6+50;//注意修改大小
long long read(){long long x=0,f=1;char c=getchar();while(!isdigit(c)){if(c=='-') f=-1;c=getchar();}while(isdigit(c)){x=x*10+c-'0';c=getchar();}return x*f;}
ll qpow(ll x,ll q,ll Mod){ll ans=1;while(q){if(q&1)ans=ans*x%Mod;q>>=1;x=(x*x)%Mod;}return ans%Mod;}
class Bank {
public:
vector<ll>a;
Bank(vector<long long>& balance) {
a.clear();
a.push_back(0);
for(auto it:balance){
a.push_back(it);
}
}
bool transfer(int account1, int account2, long long money) {
if(account1>a.size()||account2>a.size())return false;
if(a[account1]>=money){
a[account1]-=money;
a[account2]+=money;
return true;
}
else{
return false;
}
}
bool deposit(int account, long long money) {
if(account>a.size())return false;
a[account]+=money;
return true;
}
bool withdraw(int account, long long money) {
if(account>a.size())return false;
if(a[account]>=money){
a[account]-=money;
return true;
}
else{
return false;
}
}
};
/**
* Your Bank object will be instantiated and called as such:
* Bank* obj = new Bank(balance);
* bool param_1 = obj->transfer(account1,account2,money);
* bool param_2 = obj->deposit(account,money);
* bool param_3 = obj->withdraw(account,money);
*/