您将在下个月收到付款。付款编号从,并表示将与 i 付款一起支付的美元金额。在收到付款之前,您需要考虑两种银行业务选择:
您的任务是确定以上两个选项中的哪一个对您更有利。如果两种方式同样有利可图,那么您更愿意为每笔交易付费。
输入格式
在第一行中,有一个整数, 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;
}
答案 0 :(得分:0)
p[i]*x/100)
并将其存储为double
。您可能希望将p[i]*x/100.0
计算为double
。
在main
vector<int> p
中,您可以推送值以附加它们。因此,您不需要使用索引器访问容器。
另外,您可以使用迭代器和for (int i
来避免feeOrUpfront
中的std::for_each
循环。