想知道我哪里错了

Wants to know where I get wrong

本文关键字:错了 想知道      更新时间:2023-10-16

您将在下个月收到付款。付款编号为 from to,表示将与第i次付款相关的美元金额。在收到付款之前,您需要考虑两种银行服务选项:

  1. 您可以在当前银行帐户上接收所有付款,请记住,银行会向您收取每笔付款的费用 i max(k,x%of p_i(,其中给出了 k 和x
  2. 您可以预先向银行支付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.

mainvector<int> p中,您可以推送值以追加它们。因此,无需使用索引器访问容器。 此外,您还可以使用迭代器和std::for_each避免feeOrUpfront中的for (int i循环。

恕我直言,您的问题在 https://codereview.stackexchange.com/上会更匹配