问题 A: 橘子称重
时间限制: 1.000 Sec 内存限制: 16 MB提交 状态
题目描述
学校买回来一大箱橘子,有m个(m>=100 && m <= 1000),橘子大小比较均匀,学校想称一下总共有多重,发现大称坏掉了还没有修好,只有一个小的弹簧秤。学校又不想分开称,那样太慢了。
小明想了一个办法,由于橘子大小比较均匀,可以从中拿n个出来(n>=5 && n<=20),这n个橘子的重量弹簧秤是可以称出来的,有了这n个橘子的重量,就可以计算出平均一个橘子有多重,这样就能知道整箱大约有多重了。
请编写程序,从键盘读入橘子总数m,小明称的橘子的个数n以及这n个橘子的重量,计算出这箱橘子总共约有多重(结果保留1位小数)。
输入
2行,第一行2个整数m和n,分别代表一箱橘子的总个数以及小明称的橘子的个数。
第二行为n个橘子的重量(整数)。
输出
样例输入 Copy
100 7
84 83 82 81 80 79 79
样例输出 Copy
8114.3
解题思路:
假设整箱橘子的总重量为totalWeight,小明称出来的n个橘子的总重量为nTotalWeight,平均每个橘子的重量为avgWeight,则有以下公式:
totalWeight = m * avgWeight avgWeight = nTotalWeight / n
其中,m为输入的总数,n为输入的称量的个数,nTotalWeight为称量出来的n个橘子的总重量。
所以,我们只需要用第二行输入的n个数求出总重量和平均重量,再带入公式中计算即可。
注意事项:
- 输入的橘子总数m和小明称的橘子数n需要满足题目给定的范围;
- 橘子的重量为整数,但计算过程中需要转换为浮点数;
- 输出结果需要保留1位小数,可以使用C++中的setprecision()函数来控制小数位数
#include <iostream>
#include <iomanip>int main() {int m, n; // 橘子总数m和小明称量的橘子数nstd::cin >> m >> n;int nTotalWeight = 0; // 称量出来的橘子总重量for (int i = 0; i < n; ++i) {int weight;std::cin >> weight;nTotalWeight += weight;}double avgWeight = static_cast<double>(nTotalWeight) / n; // 平均每个橘子的重量int totalWeight = m * avgWeight; // 整箱橘子的总重量std::cout << std::fixed << std::setprecision(1); // 控制输出小数位数为1std::cout << totalWeight << " " << avgWeight << std::endl;return 0;
}
在这段代码中,我们首先读取输入的橘子总数m和小明称量的橘子数n。然后通过循环读取n个橘子的重量,并累加得到称量出来的橘子总重量nTotalWeight。接着使用强制类型转换将nTotalWeight转换为浮点数,再除以n得到平均每个橘子的重量avgWeight。最后通过将m乘以avgWeight得到整箱橘子的总重量totalWeight。最后使用std::cout输出结果,控制小数位数为1,使用std::setprecision函数。