2018年7月23日 星期一

itsa [C_AR021-易]成績統計

1.需要再四捨五入到第一位
(floor( X * 10 + 0.5)) / 10;  //10需根據小數幾位而變化

#include<iostream>
#include<cmath>
#include<iomanip>
using namespace std;

int main()
{
int n;
double chinese, english, math, allavg = 0, cavg = 0, eavg = 0, mavg = 0;
cin >> n;
for (int i = 0; i < n; i++)
{
cin >> chinese >> english >> math;
allavg += chinese + english + math;
cavg += chinese;
eavg += english;
mavg += math;
}
allavg = (floor((allavg / (3 * n)) * 10 + 0.5)) / 10;
cavg = (floor((cavg / n) * 10 + 0.5)) / 10;
eavg = (floor((eavg / n) * 10 + 0.5)) / 10;
mavg = (floor((mavg / n) * 10 + 0.5)) / 10;
cout << fixed << setprecision(1) << allavg << " " << cavg << " " << eavg << " " << mavg << endl;
return 0;
}

6 則留言:

  1. 請問一下,setprecision()本身就有四捨五入的功能,為何前面還需要使用floor呢?

    回覆刪除
  2. 我想可能是精確度的問題
    因為不是很明顯 好像數值超過表示的位數會有問題
    所以用另外一種方法四捨五入
    (一般應該不會有這問題 也有可能是題目給的答案問題 我寫的時候也是很困惑
    希望有幫助到你( ゚▽゚)/

    參考:
    http://yhhuang1966.blogspot.com/2014/03/java_23.html

    回覆刪除
  3. 另外如果不想用floor
    把double換成float也會過

    回覆刪除
    回覆
    1. 作者已經移除這則留言。

      刪除
    2. 嗯嗯,之後是用float過的,再次感謝說明:D

      刪除