玩转C语言(三):如何只使用printf和scanf排列三个整数

从这篇博客开始,我将以快乐的视角分享我遇到的C语言的题目。也是从此开始,我将这个专栏更名为“玩转C语言”。

1. 机缘巧合

在今天下午,一个帅气的同学找我,说能不能帮我看看如何不用if,将三个int变量进行排序啊!我第一反应,emmm,是不是你听错了呀?此刻,他把这道题的图片发给了我。放眼望去,嗯,事情没我想得那么简单。一个个显眼的要求,

  • with only 3 Variables ,
  • not permitted to use if statements ,
  • not permitted to use loops ,
  • not permitted to call functions other than printf and scanf ,
  • not permitted to use functions from the math library
  • not permitted to use printf inside expressions, only use printf as a statement
  • not permitted to assign variables inside expressions, only assign variables as a statement

我的天啊,这都是啥呀,我只好硬着头皮答应了他。心里发慌,,没干过这大事情啊。

2. 灵感来临

说来也是巧,就在我低头的一刹那,a?b:c这个表达式出现在了我的脑子里面。我就有了想法,

思路:
先将a与b进行比较,取最大,然后再将a与c比较取最大,再将两个结果比较取最大,好了,搞定最大值!
同理,通过都取最小,搞定最小值!

那我怎么比较才能出来中间值啊,不定顺序的三个输入的整数,有点难办。3个数?3个数!!!只有三个数,我都出来两个了,我何苦要比出来第三个呢!!

思路Plus:
将输入的三个数加和,再减去剩下的两个值不就ok了吗!!!!

好嘞,思路有了,开始动手!

3. 代码实现

#include <stdio.h>

int main() {
    int firstNum,secondNum,thirdNum;
    printf("请输入三个整数:");
    scanf("%d%d%d", &firstNum, &secondNum, &thirdNum);
    printf("从大到小:");
    //最大值
    printf("%d ", (((firstNum > secondNum) ? firstNum : secondNum) > ((firstNum > thirdNum) ? firstNum : thirdNum)) ? ((firstNum > secondNum) ? firstNum : secondNum) : ((firstNum > thirdNum) ? firstNum : thirdNum));
    //中间值
    printf("%d ", (firstNum + secondNum + thirdNum) - ((((firstNum > secondNum) ? firstNum : secondNum) > ((firstNum > thirdNum) ? firstNum : thirdNum)) ? ((firstNum > secondNum) ? firstNum : secondNum) : ((firstNum > thirdNum) ? firstNum : thirdNum)) - ((((firstNum < secondNum) ? firstNum : secondNum) < ((firstNum < thirdNum) ? firstNum : thirdNum)) ? ((firstNum < secondNum) ? firstNum : secondNum) : ((firstNum < thirdNum) ? firstNum : thirdNum)));
    //最小值
    printf("%d\n", (((firstNum < secondNum) ? firstNum : secondNum) < ((firstNum < thirdNum) ? firstNum : thirdNum)) ? ((firstNum < secondNum) ? firstNum : secondNum) : ((firstNum < thirdNum) ? firstNum : thirdNum));
    return 0;
}

咦!舒服了!搞定!
没有报错,测试一下。

4. 暴力测试

既然是三个数排序,那就这样吧

测试10 0 0
测试21 2 3
测试31 3 2
测试42 1 3
测试52 3 1
测试63 1 2
测试73 2 1

通过测试这7组用例,不错不错,全部通过,Over收工!

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值