JSK-16013 价钱统计【基础】

价钱统计
夏天到了,超市里摆满了各种各样的应季水果。现在知道:西瓜的价钱是每斤 1.2 元;桃子的价格是每斤3.5元;葡萄的价格是每斤4.5元;苹果的价钱是每斤 5 元。现在分别给出上述四种所购买的斤数(均不超过 20),请你编写程序帮助售货员阿姨计算并依次输出顾客购买四种水果需要的钱数及总钱数。
输入格式
输入只有一行,包含四个符合题目要求的非负实数,依次表示需要购买西瓜、桃子、葡萄和苹果的斤数。两两之间用一个空格分隔。
输出格式
输出应有五行,每行包含一个数,依次代表购买西瓜、桃子、葡萄、苹果所需的钱数,以及购买四种水果所需的总钱数。
所有输出数据均采取四舍五入保留一位小数(若小数点后为 0,也应输出这一位 0)。
样例输入
4 3 2.5 6
样例输出
4.8
10.5
11.3
30.0
56.6
题目来源
2016 年海淀区中小学生信息学奥林匹克竞赛

问题链接JSK-16013 价钱统计
问题描述:(略)
问题分析
    这是一个简单计算问题,然而却需要有资深程序员的实力,方能领会其中的奥秘。
    这个题的关键在于计算如何保证计算出来的总钱数是正确的。如果采用浮点数计算来求总钱数则容易引起精度误差,无法保证计算的正确性。只有采用整数计算才能够做到精确计算,由于小数点保留1位,所有放大10倍进行计算,输出时再酌情处理。
程序说明
    掉进坑里一回,浮点数类型用float提交出现WA。浮点数必须使用double类型才能确保精度准确。
参考链接:(略)
题记:能够解决看似简单的问题,方显程序员实力的本色。

AC的C语言程序如下:

/* JSK-16013 价钱统计 */

#include <stdio.h>

#define N 4

double price[] = {1.2, 3.5, 4.5, 5.0};

int main(void)
{
    int sum = 0, i;
    double w;

    for(i = 0; i < N; i++) {
        scanf("%lf", &w);

        int cost = w * price[i] * 10 + 0.5;  /* 计算金额:四舍五入 */
        sum += cost;
        printf("%d.%d\n", cost / 10, cost % 10);
    }
    printf("%d.%d\n", sum / 10, sum % 10);

    return 0;
}
  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值