PTA 编程题(C语言)-- 比较大小

本题要求将输入的任意3个整数从小到大输出。

输入格式:

输入在一行中给出3个整数,其间以空格分隔。

输出格式:

在一行中将3个整数从小到大输出,其间以“->”相连。

输入样例:

4 2 8

输出样例:

2->4->8

思路1:三个数之间的大小情况分为6种,我们把每种情况列举出来,并作相应的输出就行了。

注意:(1)这6种情况之中有一种情况满足,就不用考虑其他情况了。(2)考虑到输入有可能有相等的情况,所以判断有两个数相等,或者三个数相等的情况应该包含在这6种情况里。

代码1:
#include <stdio.h>
int main () {
    int a,b,c;
    scanf("%d%d%d",&a,&b,&c);
    if (a<=b && b<=c) printf("%d->%d->%d", a,b,c);
    else if (a<=c && c<=b) printf("%d->%d->%d", a,c,b);
    else if (b<=a && a<=c) printf("%d->%d->%d", b,a,c);
    else if (b<=c && c<=a) printf("%d->%d->%d", b,c,a);
    else if (c<=a && a<=b) printf("%d->%d->%d", c,a,b);
    else if (c<=b && b<=a) printf("%d->%d->%d", c,b,a);
    return 0;
}

思路2:找出三个数a,b,c中最大的赋值给max,最小的赋值给min,中间的赋值给mid;然后直接输出min->mid->max。

代码2-1:
#include <stdio.h>
int main () {
    int a,b,c,min,mid,max,tmp;
    scanf("%d %d %d", &a, &b, &c);
    // 先求出a和b中较大的赋值给tmp
    if (a > b) tmp = a;     
    else if (a <= b) tmp = b;
    // 再求出tmp和c较大的赋值给max
    if (tmp > c) max = tmp;
    else if (tmp <= c) max = c;
    // 先求出a和b中较小的赋值给tmp
    if (a < b) tmp = a;
    else if (a >= b) tmp = b;
    // 再求出tmp和c较小的赋值给min
    if (tmp < c) min = tmp;
    else if (tmp >= c) min = c;
    // 然后mid的值就等于a+b+c-min-max
    mid = a+b+c-min-max;
    // 按顺序输出就行了。
    printf("%d->%d->%d", min, mid, max);
    return 0;
}
代码2-2:
#include <stdio.h>
int main () {
    int a,b,c,tmp,max,mid,min;
    scanf("%d %d %d", &a, &b, &c);
    tmp = a>b ? a : b;         //利用三目运算符 ? : 计算a,b中较大的赋值给tmp
    max = tmp>c ? tmp : c;    //利用三目运算符 ? : 计算tmp,c中较大的赋值给max
    tmp = a<b ? a : b;         //利用三目运算符 ? : 计算a,b较小的赋值给tmp
    min = tmp<c ? tmp : c;    //利用三目运算符 ? : 计算tmp,c中较小的赋值给min
    mid = a+b+c-max-min;
    printf("%d->%d->%d",min,mid,max);
    return 0;
}
代码2-3:
#include <stdio.h>
int main () {
    int a,b,c,max,mid,min;
    scanf("%d %d %d", &a, &b, &c);
    max = (a>b?a:b)>c?(a>b?a:b):c; 
    min = (a<b?a:b)<c?(a<b?a:b):c;
    mid = a+b+c-max-min;
    printf("%d->%d->%d",min,mid,max);
    return 0;
}

思路3:(冒泡排序的思想)按照a,b,c的顺序从a开始比较前后两个数的大小,如果前面的大于后面的,就交换两个数的,即如果a>b,就把原来的b赋值给a,把原来的a赋值给b;交换完后再继续比较b和c。这样经过一轮比较下来,最大的数肯定就被换到最后的位置了,也就一轮比较交换后,c中存放的就是最大的数了。然后再进行一轮,b中存放的就是除了c以外最大的数了。代码3会比较抽象,但是理解好了对后面学习冒泡排序有帮助。

代码3:
#include <stdio.h>  // 这里用到了(冒泡)排序的思想
   int a,b,c,tmp;
   scanf("%d %d %d", &a, &b, &c);
   if (a > b) {   // 先比较a和b,如果a > b, 则把a、b的值互换,注意互换时需要用到一个临时变量,存储一下中间过程。
       tmp = a;
       a = b;
       b = tmp;
   }
   // 执行完上面一段代码,a 就小于 b 了,即b是a、b中最大的 
   if (b > c) {  // 再比较b和c,如果b > c,则交换b、c的值。
       tmp = b;
       b = c;
       c = tmp;
   }
   // 执行完上面一段代码,b 就小于 c 了,即c是a、b、c中最大的 
   if (a > b) { // 最后再比较一下a和b
       tmp = a;
       a = b;
       b = tmp;
   }
   // 执行完上面一段代码,a就是a、b、c中最小的 

   printf("%d->%d->%d",a,b,c);
   return 0;
}

更多PTA题目的的参考代码,可以在wx小程序里搜“PTA刷题助手”,或扫下面的二维码

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值