平均数三种境界

  1. 前言
    1. 解法一:
    2. 解法二:
    3. 方法三:
  2. 结语

前言

平均数:平均数是指在一组数据中所有数据之和再除以数据的个数。平均数是表示一组数据集中趋势的量数,它是反映数据集中趋势的一项指标。今天就简单讲解一下编程界平均数几种简要解法。

解法一:

这种方法最为简单,弊端是如果a和b非常大的话,a+b的值可能超过了整型的储存范围(最大值为2147483647),导致溢出,得到错误的结果。

  • 参考代码
#include <stdio.h>  
int main()  
{  
  int a=10;    

  int b=20;    

  int avg=0;    

  avg=(a+b)/2;//平局值    

  //或者
  avg=(a+b)>>1://右移表示除2,左移表示乘2。

  //【-1除外】(右移一位为-1,左移一位为-2)    
  printf("%d\n",avg);
  return 0;  
}  

解法二:

用一个较大值减去另一个较小值得到二者之差,将差除2后加上较小值即得到了二者平均值,可有效防止溢出的情况的出现。

步骤如图:

图片加载

  • 参考代码
#include <stdio.h>  
int main()  
{  
  int a=10;   

  int b=20;    

  int avg=0;    

  avg=b+(a-b)/2;//平均值    

  //或者    
  avg=b+(a-b)>>1://右移表示除2,左移表示乘2

  //【-1除外】(右移一位为-1,左移一位为-2)
  printf("%d\n",avg);
  return 0;  
}   

方法三:

将两个数的二进制位分为相同部分和不同部分,利用按位与求出相同部分的平均数,然后再用按位异或求出不同部分的平均数,加起来就是两个数的平均数。

这里举个栗子:

  • a = 10,b = 12;
  • 10&12可得到 1000
  • 10^12可得到 0110
  • 计算a与b的平均值C语言表达式:*
  • avg = (a&b) + (a^b)>>1

  • 参考代码

#include <stdio.h>  
int main()  
{  
  int a=10;    

  int b=20;    

  int avg=0;    

  avg = (a&b)  + (a^b)>>1;    

  //或者    
  avg = (a&b)  + (a^b)/2;    
  printf("%d\n",avg);
  return 0;  
}   

结语

知识在于汇总,方法在于总结。
不忘初心,励志前行!


部分资料来源于网络,版权属其原著者所有,只供学习交流之用。如有侵犯您的权益,请联系【公众号:码农印象】删除,可在下方评论,亦可邮件至ysluckly.520@qq.com。互动交流时请遵守宽容、换位思考的原则。

×

喜欢就点赞,疼爱就打赏

(function(){ var bp = document.createElement('script'); bp.src = '//push.zhanzhang.baidu.com/push.js'; var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();
休闲小游戏