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;}
阅读全文
1 0
- ACM_41
- switch引发的错误 a label can only be part of a statement and a declaration is not a statement
- E. Karen and Supermarket(树形dp)
- C#中窗体的close,dispose,以及application.exit()的区别
- poj1091(容斥原理+质因子分解)跳蚤
- navicat快捷键大全。
- ACM_41
- 编程珠玑课后题答案3.4
- 同步异步 阻塞非阻塞
- HDU2561 第二小整数【序列处理】
- laravel 模板页如何输出htmlspecialchars_decode()转义后文本
- 深度学习Matlab工具箱代码注释——cnntrain.m
- 对oracle空值排序,最前面(nulls first)或者最后面函(nulls last)
- 百练_2747:数字方格
- Vue之todoList