top1编程
← 返回题目
题解

按照商品价格升序排序

1 条题解

  • 0
    @ 2026-8-5 23:52:33

    P4678 按照商品价格升序排序(入门)

    解题思路

    第一步,读入价格。 价格是小数,用 double 类型的数组 prices 存下 n 件商品的价格。

    第二步,从小到大排序。 sort(prices, prices + n) 默认就是从小到大排序,正好符合题目"价格从低到高"的要求,不需要写自定义规则。

    第三步,保留两位小数输出。 输出时要注意格式:价格要保留两位小数,比如 13.5 要输出成 13.50。用 printf("%.2f", prices[i]) 固定保留两位小数,相邻价格之间用空格隔开,末尾换行。

    想一想生活里的例子。 超市货架上便宜的商品放前面,贵的放后面,顾客按价格挑选就很方便。

    用例子验证。 输入 4 件商品价格 13.5、2.25、5、1.75,排序后变成 1.75、2.25、5、13.5。输出为 1.75 2.25 5.00 13.50:前两个本来就是两位小数不用补,5 和 13.5 被 %.2f 补成 5.00 和 13.50。

    边界情况: n ≤ 100,价格是两位小数的浮点数,用 double 存没有任何问题;sort 按数值大小比较,不会因为小数位数不同而弄错顺序。

    参考代码

    // P4678 按照商品价格升序排序:n件商品价格从低到高排序,保留两位小数
    #include <iostream>
    #include <cstdio>
    #include <algorithm>
    using namespace std;
    
    double prices[105];
    
    int main() {
        int n;
        cin >> n;
        for (int i = 0; i < n; i++) {
            cin >> prices[i];
        }
        sort(prices, prices + n); // 从小到大
        for (int i = 0; i < n; i++) {
            if (i) printf(" ");
            printf("%.2f", prices[i]); // 保留两位小数
        }
        printf("\n");
        return 0;
    }
    

    复杂度分析

    sort 排序 n 个价格,时间复杂度 O(n log n),n ≤ 100,秒完成。空间复杂度 O(n),存 n 个商品价格。

    • 1