我对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;,但仍然没有效果。它仍然显示错误答案......
答案 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;
}