用非正常的算法求平均值,然并卵

来源:互联网 发布:max守望先锋数据不更新 编辑:程序博客网 时间:2024/05/16 05:59

不用(a+b)/2的算法求平均数

第一种方法:

#include<stdio.h>

  int main()

{

int a = 0;

int b = 0;

int mid = =0;

scanf("%d%d",&a,&b);

mid = (a-b)/2+b;       主要是这个算法的解读

printf("mid=%d",mid);

 return 0;

}



第二种方法:

#include<stdio.h>

int main()
{
    int a = 0;
    int b = 0;
    int mid = 0;
    scanf("%d%d",&a,&b);

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

  平均数就是(a+b)/2   a+b 如果用二进制,每个数位可以分三种情况(0+1,1+0), (0+0)和(1+1)     第一种情况可以通过a^b找出来,结果就是a^b  第二种等于0,不用管第三种可以用a&b找出来,但是1+1等于10要进位,所以是(a&b)<<1      所以(a+b)=(a^b+(a&b)<<1)    (a+b)/2=((a^b)>>1+(a&b))

    printf("mid=%d\n",mid);
    return 0;
}

0 0
原创粉丝点击