RT,如何在不用循环、不用判断、不用三目运算符的条件下,实现三个数字的排序?代码如下
#include <iostream>
#include <cstdio>
using namespace std;
int main()
{
int a,b,c;
scanf("%d %d %d",&a,&b,&c);
int d=a*(a<b)+b*(b<=a); //求出a,b中的最小值,d即为这个最小值
int e=d*(d<c)+c*(c<=d); //求出三个中的最小;
d=(a+b-d)*(a+b-d>c)+c*(c>=a+b-d);
//d是a,b中的最小值,故a+b-d为a,b中的最大值,再通过上面这条式子选出a+b-d与c两者之间的较大值,即可得到三个数中的最大值
printf("%d %d %d\n",e,a+b+c-e-d,d);
//e,d分别为最小值和最大值,三个数的总和减去最大值和最小值即得中间值
return 0;
}
想法来自:诸君有哪些有关排序的奇技淫巧? - rsa的回答 - 知乎 https://www.zhihu.com/question/269128251/answer/345732846