题解
按照商品价格升序排序
1 条题解
-
0
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