加油折扣精确版(ง•̀_•́)ง,总是部分正确

img

img

#include <stdio.h>
float count_discount(int x, float y,float pay)
{
    float sum;
    if (pay<200)
    {
        sum = y * 0.3;// 每升优惠3毛
    if (x == 5)  // 星期五每升额外优惠1毛 
        sum += y * 0.1;
    }
    else
    {
        y = y - (200 / 8.38);
        sum = y * 0.3;// 每升优惠3毛
        if (x == 5)  // 星期五每升额外优惠1毛 
            sum += y * 0.1;
    }
    sum = (int)(sum*100.0 + 0.5) / 100.0;
       return sum;
}
float coupondiscount(float a)
{
    if (a>200)
    {
        return 20;
    }
    else 
    {
        return 0;
    }
}
int main()
{
    int t, x;
    float y;
    float pay, discount;
    scanf("%d", &t);
    while (t--)
    {
        scanf("%d", &x);
        scanf("%f", &y);
        pay =(8.38 * y);
        discount = count_discount(x, y,pay);
        if (pay >= 200)
            pay -= 20;
        pay = pay - discount;
        printf("Order amount: %.2f\n", (int)(8.38 * y*100.0+0.5)/100.0);
        printf("E-coupon discount amount: %.2f\n", coupondiscount(8.38 * y));
        printf("Discount amount: %.2f\nPayment amount: %.2f\n", discount, (int)(pay*100.0 + 0.5) / 100.0);
    }
    return 0;
}

总是部分正确,不知道错在哪里\(◎o◎)/!大家看看能不能改改?是逻辑上的问题,还是精度的问题

请把代码用 “代码块” 贴出来,大家才好帮你。

试试这样改:

#include <stdio.h>
#define PRICE 8.38
double count_discount(int x, double y)
{
    double sum;
    sum = y * 0.30;// 每升优惠3毛
    if (x == 5)  // 星期五每升额外优惠1毛
        sum += y * 0.10;
    return (int)(sum * 100.0 + 0.5) / 100.0;;
}

int main()
{
    int num, x, ret, ret1;
    double y, order, E_coupon, Payment, discount;
    ret = scanf("%d", &num);
    if (ret == 1) {
        if (num < 1 || num > 10)  return  -1;
        while (num > 0)
        {
            ret = scanf("%d", &x);
            ret1 = scanf("%lf", &y);
            num--;
            if (ret == 1 && ret1 == 1) {
                if (x < 1 || x > 7)  continue;
                if (y < 0 || y > 50) continue;
                order = (int)(PRICE * y * 100.0 + 0.5)/100.0;
                if (order >= 200.0) {
                    E_coupon = 20.0;
                    y -= (200.0/PRICE);
                    discount = count_discount(x, y);
                }
                else {
                    E_coupon = 0.0;
                    discount = count_discount(x, y);
                }
                Payment =  order - E_coupon - discount;
                printf("Order amount: %.2f\n", order);
                printf("E-coupon discount amount: %.2f\n", E_coupon);
                printf("Discount amount: %.2f\n", discount);
                printf("Payment amount: %.2f", Payment);
                if (num != 0) printf("\n");
            }
        }
    }
    return 0;
}

没有输出样例吗?

输出样式

img