正确的输出,但是codechef在提交代码时说错了

时间:2019-10-28 13:50:39

标签: c

链接到问题:https://www.codechef.com/problems/HS08TEST

  

说明

     

Pooja希望从ATM机上提取X美元。仅当X为5的倍数且Pooja的帐户余额中有足够的现金来执行提款交易(包括银行手续费)时,自动提款机才会接受交易。每次成功取款,银行收取0.50美元。尝试交易后计算Pooja的帐户余额。

     

输入

     

正整数0      

负号0 <= Y <= 2000,精度为两位数-Pooja的初始帐户余额。

     

输出

     

尝试进行交易后输出帐户余额,以两位精度的数字给出。如果帐户中没有足够的资金来完成交易,请输出当前的银行余额。

     

示例-成功交易

     

输入:   30 120.00

     

输出:   89.50

     

示例-提款金额不正确(不是5的倍数)

     

输入:   42 120.00

     

输出:   120.00

     

示例-资金不足

     

输入:   300 120.00

     

输出:   120.00

当我更改交易功能中的参数时,我找不到任何不正确的输出,但是由于某些我找不到的错误,我仍然无法成功提交它。这是我第一次尝试Codechef或实际上是任何竞争性编程,因此将不胜感激。这是我的代码:

#define count 0.5

float transaction(int , float);

int main(void) 
{
    float transaction(int x, float acc_bal)
    {
        float z=acc_bal-(x+count);
        if(x<acc_bal)
        {
            if(x%5==0)
            {
                printf("%.2f",z);
            }   
        }

        if(x%5!=0)
        {
            printf("%0.2f",acc_bal);
        }
    }   

    transaction(42,120.00); 
}

3 个答案:

答案 0 :(得分:2)

函数内部的函数不是标准C。某些编译器支持它,但是您依赖编译器扩展。这样做:

#include <stdio.h>
#define count 0.5

float transaction(int x, float acc_bal)
{
    float z=acc_bal-(x+count);
    if(x<acc_bal)
    {
        if(x%5==0)
        {
            printf("%.2f",z);
        }   
    }

    if(x%5!=0)
    {
        printf("%0.2f",acc_bal);
    }
}   

int main(void) 
{
    transaction(42,120.00); 
}

但是您的代码不必要地混乱,并且缺少x大于余额的情况。同样,也不必将其声明为浮点数。我会这样写:

void transaction(int x, float acc_bal)
{
    const float count = 0.5;
    float after=acc_bal-(x+count);

    if(x%5 == 0 && after>=0.0) {
        printf("%.2f\n",after);
    } else {
        printf("%0.2f\n",acc_bal);
    }
}   

答案 1 :(得分:1)

除了函数中的功能和缺失的返回值(顺便说一句未使用)之外,问题在于您永远不会检查帐户是否转为负数。

检查如果您使用transaction(100,100.45);调用代码会发生什么情况

请尝试尝试:

#define count 0.5

void transaction(int x, float acc_bal)
{
    float z = acc_bal - count - x;  // z will be new balance if the transaction is made
    if (z >= 0 && x % 5 == 0)       // check if the transaction can be made
    {
        acc_bal = z;                // it could... so update balance
    }
    printf("%0.2f\n",acc_bal);      // print current balance
}   

int main(void) 
{
    transaction(100,100.45);  // not ok - can't pay bank charges
    transaction(99, 100.45);  // not ok - x is not a multiple of 5
    transaction(95, 100.55);  // ok
}

输出:

100.45
100.45
5.05

答案 2 :(得分:0)

问题中的代码与问题说明存在一些偏差和潜在偏差:

  • 该程序无法正确测试交易是否可以完成,因为它测试所请求的金额是否小于帐户余额,而不是所请求的金额加上提款费是否小于<强>或等于余额。
  • 不知道float的精度足以表示银行余额。
  • 程序无法用换行符结束输出行。 (尽管问题陈述未明确说明,但可能会隐含地表示出来。)
  • 程序无法包含<stdio.h>