[关闭]
@Aonrbet 2018-12-13T11:41:54.000000Z 字数 761 阅读 888

P5082成绩

题解


题目链接

咳咳,离开机房后有一段时间了,做的第一到上手题(自信题),写道题解找找感觉

其实这道题超简单的,原来好像空间限制到了,不过现在改道之后真的是一道大水题啦!不一定要用数组做哦,就把他当成空间限制的题来做吧,一种思维转换的培养,刷刷这道题确实挺有必要的

首先如果这道题限制到的话,用数组肯定过不了,那么如何转换?

首先题目要求(每一科的满分之和*3-每一科的实际得分之和*2)÷每科所扣除分数的和,很容易想到把每一课的算出来,最后加起来再除以每课扣分之和,嗯,不错,好思路,但你过不了这道题

于是就有了这样一种思路:

每课满分之和*3-每课实际得分之和*2/(每课满分之和-每课实际得分之和)(有点绕口)

这种办法可行,于是为什么呢?小学的交换律和结合律我真的不想讲,不过在这里还是要说一下(就当复习了):

可得(结合律)

然后得到 (分配率and结合律)

其中为每课扣除分数之和,就等于各科满分之和,就等于各科实际得分之和

所以我们上面的思路是有数学依据的,所以他一定是对的,所以放心去打你的code吧,少年!

code

  1. #include <cstdio>
  2. int a , n ;
  3. double ans , num ;
  4. int main(){
  5. scanf( "%d" , &n ) ;
  6. for( int i = 0 ; i < n ; i ++ ){
  7. scanf( "%d" , &a ) ;
  8. ans += (double)a;
  9. }
  10. for( int i = 0 ; i < n ; i ++ ){
  11. scanf( "%d" , &a ) ;
  12. num += (double)a ;
  13. }
  14. printf( "%0.6lf" , ( ans * 3 - num * 2 ) / ( ans - num ) ) ;
  15. return 0 ;
  16. }
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注