C 我的if语句不';行不通

C 我的if语句不';行不通,c,if-statement,C,If Statement,有个人想在机器上赌博。不过他有点笨,所以他想赔钱,而且不会玩机器,除非从长远来看这会让他赔钱。有三个变量,N(一个介于1和100之间的值)-如果他赢了,他赢的钱的数量,K(一个介于1和100之间的值)-玩游戏的钱的数量和p(一个介于0和1之间的浮动值)-赢的概率。这是我正在使用的代码: int n; int k; float p; cin >> n >> k >> p; if( k-n > 0 ) { cout << "Play";

有个人想在机器上赌博。不过他有点笨,所以他想赔钱,而且不会玩机器,除非从长远来看这会让他赔钱。有三个变量,N(一个介于1和100之间的值)-如果他赢了,他赢的钱的数量,K(一个介于1和100之间的值)-玩游戏的钱的数量和p(一个介于0和1之间的浮动值)-赢的概率。这是我正在使用的代码:

int n;
int k;
float p;
cin >> n >> k >> p;
if( k-n > 0 )
{
    cout << "Play";
}
if( k-n == 0 )
{
    if( p == 1 )
    {
        cout << "Don't Play!";
    }
    else
    {
        cout << "Play";
    }
}
if( k-n < 0 )
{
    if( p >= ((float)k/n) )
    {
        cout << "Don't Play!";
    }
    else
    {
        cout << "Play";
    }
}
intn;
int k;
浮动p;
cin>>n>>k>>p;
如果(k-n>0)
{

你应该读一些关于概率的书

p>=((浮动)k/n)

应写为

p*(n-k)+(1-p)*(0-k)>0

编辑:

很抱歉,我犯了一个错误。我认为它更干净一点,并且你不能得到0的div。但事实上它们应该是一样的


也许你应该让p加倍,这样你就不会因为四舍五入的问题而出错。

想想“如果p==1”.你真的能比较浮动是否相等吗?既然这是一场比赛,你不认为你应该更加努力,在没有外部帮助的情况下获胜吗?@StefanoSanfilippo这是一个比赛网站上的文章。这个问题本身只是一个练习问题。@GreenAsJade嗯,我不知道,似乎我能。如果我把k=5,n=5和p=1放在一起,我就得到了我的答案消息不玩,如果我把k=5,n=5和p=0.9999999放进去,我会得到消息Play。你认为k==n的逻辑正确吗?在你的问题描述中,你说他不会在一台能让他赢的机器上玩。如果k==n,他永远不会赢任何东西,所以他可以玩?我试过了,现在代码只在网站上进行了2/8次测试。为什么你认为应该这样写呢?这更容易被写为PN-K>0。因此,它等于我写的,它应该只是PN-K>=0。我不明白。如果它们相等,为什么它更失败?也许你应该考虑当n=0(如果舍入会影响结果)的条件。n不能是0,这在问题中已经说明了。你写的东西和我写的不一样,因为我的是>=而你的只是>。我试着写p*n-k>=0,得到了与我自己的代码相同数量的正确答案,所以舍入似乎不是问题。