想知道我哪里出错了

时间:2017-08-19 06:56:45

标签: c++

您将在下个月收到付款。付款编号从,并表示将与 i 付款一起支付的美元金额。在收到付款之前,您需要考虑两种银行业务选择:

  1. 您可以在当前的银行帐户中收到所有款项,并记住银行向每次付款收取的费用( k x p_i < / strong>),其中给出了k和x。
  2. 您可以预先向银行支付 d 美元,以开设一个新的特殊帐户,银行不会向您收取任何即将进行的交易。
  3. 您的任务是确定以上两个选项中的哪一个对您更有利。如果两种方式同样有利可图,那么您更愿意为每笔交易付费。

    输入格式

    在第一行中,有一个整数, 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;
    }
    

1 个答案:

答案 0 :(得分:0)

多次计算

p[i]*x/100)并将其存储为double。您可能希望将p[i]*x/100.0计算为double

main vector<int> p中,您可以推送值以附加它们。因此,您不需要使用索引器访问容器。 另外,您可以使用迭代器和for (int i来避免feeOrUpfront中的std::for_each循环。

恕我直言您的问题在https://codereview.stackexchange.com/

时会更好地匹配