1

我是初学者 C++ 编码器(也是一般编程的初学者),我似乎遇到了问题。我的教授分配给我这个项目,我似乎大部分都做对了,但我一直得到一个错误的答案。对于我的程序,当它应该是40时,我一直得到42作为最终答案( b输入1.00,l输入2.00 ,p 输入0.01)。我将不胜感激任何帮助,并提前感谢任何建议或提示。

在此处输入图像描述

#include <iostream>
#include <cstdlib>
#include <cmath>

using namespace std;

  int main()
{
   double b, l, p, num, P;
   num = P = 0;

   cout << "Enter the net profit, net loss, and the probabilty "; 
   cout << "of the products being sold   respectively: ";
   cin  >> b >> l >> p;

   if (p <= 0 || p >= 1)
   {
       cout << "\n";
       cout << "The probability is either too large or small. " << endl;
       cout << "Please try again." << endl;
   }

   else 
   {   
       cout << "\n";  
       while( (b / (b + l)) > P)
       {
          P += (p * pow((1-p),num));
          num++;
       }

       cout << "It is optimal to order "; 
       cout << num + 1 << " products. " << endl;
   }

  system("PAUSE");

  return 0;
}  
4

2 回答 2

1

我不声称了解您的应用程序,而只是查看计算的结构,与比率 b / (b + l) 相比,P 的值是否会落后一个“转”?

如果是这样,那么在进入 while 循环之前添加对 P 的更新就可以了,即,在 while 之前插入 P 计算,P(i = 0) = p。因此,为了清楚起见,我使用了以下代码:

else
    {
        cout << "\n";
        P = p; // added this line: P(i=0) = p
        while(b / (b + l) > P) {
            P += p * pow((1 - p),num);
            num++;
        }
        cout << "It is optimal to order ";
        cout << num + 1 << " products. " << endl;
    }

这给出了输出:

It is optimal to order 40 products. 

这当然可能不是错误的真正来源,但至少可能会给你一些额外的思考。

于 2013-11-05T02:28:21.043 回答
0

给定算法,答案的数学是合理的。你确定答案是40?在你取的最后一行num,加上1给你42。你确定不是负1?我同意 nhgrif 对可读性的一些评论,但因为你是新手,所以我现在让它滑动。我更关心为什么或为什么不num + 1应该在你的 cout 中。据我所知,该程序完全按预期工作。

于 2013-11-05T02:08:56.140 回答