ACM_41

来源:互联网 发布:snmp监控linux主机 编辑:程序博客网 时间:2024/06/15 19:48

描述

现在要写一个程序,实现给三个数排序的功能

输入

输入三个正整数

输出

给输入的三个正整数排序

看过一个老哥的帖子,原贴:http://blog.csdn.net/gukesdo/article/details/7439059
如果两个数比较大小a和b;

最小值公式:(b^(a^b)&-(a < b))
解释下:
1.如果a < b; 为真则为1,为假则为0,所以-(a < b)是-1,计算机中都是用补码表示数字的,所以计算机中-1表示为全1;所以(a^b)&-1得到的结果就是(a^b);b^(a^b)结果为a;
2.如果a>b; -(a < b)为-0,补码的好处就是+0和-0是一个值,全为0,所以(a^b)&-(a < b)得到的结果为0,之后b^0还是b;

…………………………………………………………………………………………………………………………..

最大值公式:(a^(a^b)&-(a < b)) 解释下:
1.如果a < b; 则(a < b)为真,表达式本身值为1,则-(a < b)值是-1,所以a ^ (a ^b) = b;
2.如果a > b; 则(a < b)为假,表达式本身值为0,则-0还是0, 所以a ^ 0 = a ;

#include <stdio.h>int main(int argc, char** argv) {    int a, b, c;    scanf("%d %d %d", &a, &b, &c);    int Rmin,Rmax;    Rmin = (c ^ (((b ^ (a ^ b)&-(a < b))) ^ c)&-(((b ^ (a ^ b)&-(a < b))) < c));    Rmax = (((a ^ (a ^ b)&-(a < b))) ^ (((a ^ (a ^ b)&-(a < b))) ^ c)&-(((a ^ (a ^ b)&-(a < b))) < c));    printf("%d %d %d\n", Rmin, a + b + c - Rmin - Rmax, Rmax);    return 0;}
原创粉丝点击