您将在下个月收到付款。付款编号为 from to,表示将与第i次付款相关的美元金额。在收到付款之前,您需要考虑两种银行服务选项:
- 您可以在当前银行帐户上接收所有付款,请记住,银行会向您收取每笔付款的费用 i max(k,x%of p_i(,其中给出了 k 和x。
- 您可以预先向银行支付d美元以开设一个新的特殊账户,银行不会向您收取任何即将进行的交易费用。
您的任务是决定上述两个选项中哪一个对您更有利可图。如果两种方式的利润相同,那么您更愿意为每笔交易付费。
输入格式
在第一行中,有一个整数,q表示要处理的方案数。之后,接下来是所有这些场景的描述。在单个场景的第一行中,有空格分隔的整数。在第二行中,有空格分隔的整数 p_0,p_1,p_2,...p_(n-1(。
约束:
1<=q<=5
1<=n<=100
1<=p_i<=1000
1<=k<=1000
1<=x<=100
1<=d<=100000
如果使用活期账户并让银行为每笔交易收费更有利可图,则打印费用,或者如果最好预先向银行支付开立新特殊账户的费用,则预先打印。
下面是我的代码: 我不确定为什么它没有涵盖所有情况,请启发我,谢谢!
string feeOrUpfront(int n, int k, int x, long int d, vector <int> p)
{
double sum=0;
double amountcharged;
amountcharged=0;
for (int i=0;i<n;i++)
{
if ((p[i]*x/100)>k)
{amountcharged=p[i]*x/100;}
else
{amountcharged=k;}
sum=sum+amountcharged;
}
if (sum>d)
{
return "upfront";
}
else
{
return "fee";
}
}
int main() {
int q;
cin >> q;
for(int a0 = 0; a0 < q; a0++){
int n;
int k;
int x;
int d;
cin >> n >> k >> x >> d;
vector<int> p(n);
for(int p_i = 0; p_i < n; p_i++){
cin >> p[p_i];
}
string result = feeOrUpfront(n, k, x, d, p);
cout << result << endl;
}
return 0;
}
p[i]*x/100)
被多次计算并存储为double
。可能您想将p[i]*x/100.0
计算为double
.
在main
vector<int> p
中,您可以推送值以追加它们。因此,无需使用索引器访问容器。 此外,您还可以使用迭代器和std::for_each
避免feeOrUpfront
中的for (int i
循环。
恕我直言,您的问题在 https://codereview.stackexchange.com/上会更匹配