三个数字的中间值

 

原题是:只用两次比较,得到三个数的中间值。

 

背景:写快速排序的改进算法,取左、中、右三个值的中间值,作为pivot。但是,写了很久,居然写晕了,也不对。于是上网搜,发现,呵呵,很多人都做不对,或者能做对也非常慢。幸好找到的比较好的答案。

 

答案:不懂的千万别问我啊,据说这是初中数学题。

  1. if( (a-b)*(b-c)>0 ) 
  2.     return b;
  3. else if( (b-a)*(a-c)>0 ) 
  4.     return a;
  5. else return c;
  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: 输入三个 a、b、c: 若 a>b 且 a>c,则 a 为最大; 若 b>a 且 b>c,则 b 为最大; 若 c>a 且 c>b,则 c 为最大; 最小同理,可得到最小 min。 中间为剩下的,即: 如果 a 是最大,b 是最小,则中间为 c; 如果 a 是最大,c 是最小,则中间为 b; 如果 b 是最大,a 是最小,则中间为 c; 如果 b 是最大,c 是最小,则中间为 a; 如果 c 是最大,a 是最小,则中间为 b; 如果 c 是最大,b 是最小,则中间为 a。 ### 回答2: 要求输入三个,来求得最大、最小中间。首先,我们需要使用三个变量来存储输入的三个。然后,通过比较三个的大小来找到最大、最小中间。 假设我们使用变量a、b、c来分别存储输入的三个。我们可以使用条件语句来进行比较: 1. 首先,我们假设a是最大,将a赋给最大变量max_value。 2. 接着,我们将b和c与max_value进行比较。如果b大于max_value,则将b赋给max_value;如果c大于max_value,则将c赋给max_value。通过这样的比较,我们可以确定最大。 3. 同样的,我们将a赋给最小变量min_value。然后,通过比较b和c与min_value的大小,来确定最小。 4. 最后,我们通过比较a、b和c与max_value、min_value的关系,来确定中间中间即不是最大也不是最小数字。 这样,我们就可以得到最大、最小中间了。 需要注意的是,如果三个相等,那么它们的最大、最小中间都是这个相等的。 ### 回答3: 输入三个,可以采用以下步骤求出最大、最小中间。 首先,将三个分别命名为a,b,c,假设a为输入的第一个,b为第二个,c为第三个。 要求最大,可以通过比较a,b,c的大小来确定。首先,将a赋给max_num,然后依次与b和c进行比较,如果b大于max_num,则将b赋给max_num,再与c比较,如果c大于max_num,则将c赋给max_num。最终,max_num即为最大。 同样的道理,要求最小,可以通过比较a,b,c的大小来确定。首先,将a赋给min_num,然后依次与b和c进行比较,如果b小于min_num,则将b赋给min_num,再与c比较,如果c小于min_num,则将c赋给min_num。最终,min_num即为最小。 最后,求出中间,可以通过交换变量的来实现。首先,比较a和b的大小,如果a大于b,则交换a和b的。然后,比较b和c的大小,如果b大于c,则交换b和c的。此时,a、b、c的已经按照从小到大的顺序排列,所以b即为中间。 综上所述,输入三个,最大为max_num,最小为min_num,中间为b。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值