CodeChef ATM Easy级别:使用Casting,Conditionals。代码未被接受

时间:2015-05-17 18:44:27

标签: c casting floating-point conditional-statements floating-point-conversion

我对C中的投射有一点疑问。以下问题涉及基本的投射和/或条件逻辑。

所以,我刚刚开始解决CodeChef的基本问题,让学习编码变得有趣,我试图解决以下问题" easy"问题:(http://www.codechef.com/problems/HS08TEST)。

我相信我也应该在这里引用SO社区的问题:

  

Pooja希望从ATM取款X $ US。取款机将   如果X是5的倍数,则只接受交易,Pooja's   账户余额有足够的现金来执行提款交易   (包括银行手续费)。每次成功撤回银行   收费0.50美元。尝试后计算Pooja的账户余额   事务。

     

输入正整数0&lt; X <= 2000 - Pooja希望撤回的现金数额。非负数0 <= Y <= 2000,有两个   精度数字 - Pooja的初始账户余额。

     

输出在尝试的交易后输出帐户余额,以两位精度数字给出。如果还不够   在账户中的钱来完成交易,输出当前   银行余额。

     

示例 - 成功交易 输入:30 120.00   输出:89.50

     

示例 - 提取金额不正确(不是5的倍数) 输入:42 120.00&gt; 输出:120.00

     

示例 - 资金不足 输入:300 120.00   输出:120.00

我认为如何通过将整数转换为浮动来实现这一点?。我知道定义浮点变量的方法,如其他人提交的解决方案中所见,(即将余额声明为浮点类型),但我还是想知道为什么可以这样?(将余额声明为int并稍后将其转换为浮动)。

代码正在编译&amp;在本地IDE上执行正常,但不被接受。我在哪里出错了?

这是一个强大而简单的代码:

#include<stdio.h>
int main()
{
 int amt , bal ;
 float result;
 scanf("%d %d", &amt, &bal );
 if( ( 0 < amt <= 2000 ) && ( 0 <= bal <= 2000 ) ) //CORRECTED.SEE EDIT.
 {
    if ( ( amt % 5 !=0 ) || ( bal <= amt+1) )
    {
        result=(float)bal;
        printf("%.2f",result);
        return 0;
    }
    else
    {
        result = (float) (bal-amt-0.50);
        printf("%.2f",result);
    }
}   
return 0;
}

请告诉我某处的逻辑是否错误。

编辑:我将关系运算符更改为&#39; if((amt&gt; 0)&amp;&amp;(amt&lt; = 2000)&amp;&amp;(bal&gt; = 0)&amp;&amp;(bal&lt; = 2000))&#39;,但仍然没有效果。它仍然显示错误答案......

2 个答案:

答案 0 :(得分:1)

  0 < amt <= 2000 

不,这不是您在C中使用关系运算符的方式。你需要在两个单独的条件检查中分解它。

这样的东西
if ( (0 < amt) && (amt <= 2000))....

同样适用于其他事件。

答案 1 :(得分:0)

变化:

if( ( 0 < amt <= 2000 ) && ( 0 <= bal <= 2000 ) )

为:

if((amt>0)&&(amt<=2000)&&(bal>=0)&&(bal<=2000))

bal应该是浮动的

 #include<stdio.h>
    int main()
    {
     int amt  ;
     float result,bal;
     scanf("%d %f", &amt, &bal );
    if((amt>0)&&(amt<=2000)&&(bal>=0)&&(bal<=2000)) //CORRECTED.SEE EDIT.
     {
        if ( ( amt % 5 !=0 ) || ( bal < amt+0.5) )
        {
            result=bal;
            printf("%.2f",result);
            return 0;
        }
        else
        {
            result = bal-amt-0.50;
            printf("%.2f",result);
        }
    }   
    return 0;
    }