三数据比较大小

     这里主要是讨论算法的实现,看似简单,其实不同算法的实现思想不一样。

假设一个很普通的例子,输入a,b,c三个整数,按升序排列。

方法一:a,b,c两两比较,有6种组合,用if ...else if实现,如下:

#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\n", a, b, c);

else if(a < = c && c <= b)  printf("%d %d %d\n", a, c, b);

else if(b < = a && a <= cprintf("%d %d %d\n", b, a, c);

else if(b < = c && c <= aprintf("%d %d %d\n", b, c, a);

else if(c < = a && a <= b) printf("%d %d %d\n", c, a, b);

else if(c < = b && b <= a) printf("%d %d %d\n", c, b, a);

return 0;

}


方法二:觉得上面的分支太多,先a,b比较,如果a>b,则交换;再a,c比较,如果a>c,则交换;最后b,c比较,如果b>c则交换

#include<stdio.h>
int main(){

int a, b, c, t;
scanf("%d%d%d",&a, &b, &c);
if(a > b){t = a; a = b; b = t;}
if(a > c){t = a; a = c; c = t;}
if(b > c){t = b; b = c; c = t;}
printf("%d %d %d\n",  a, b, c);
return 0;

}


方法三:设定当前最小值x和最大值z,初始化值均为a,随着比较的进行,最小值和最大值慢慢更新。变成最后的真实的最大最小值。知道最小最大值,那么中间值y可以算出来的。

#include<stdio.h>
int main(){

int a, b, c, x, y, z;
scanf("%d%d%d", &a, &b, &c);
//min x;max z
x = a; if(b < x) x = b; if(c < x) x = c;
z = a; if(b > z) z = b; if(c > z) z = c;
y = a + b + c - x - z;
printf("%d %d %d\n",  x,  y,  z);
return 0;

}


另外附带一题:

输入正整数n<=30,输出一个n层的倒三角。例如n=5时,输出如下:

* * * * * * * * * 
  * * * * * * * 
    * * * * * 
      * * * 
        * 

我的实现如下:

#include <stdio.h>
int main(){
int i, t, j, k;

scanf("%d",&i);

for(t = i;  t >= 1; t--){

//先输出2个空格字符
for(k = i - t;  k > 0;  k--)
{
printf("  ");
}

  //后输出"* "字符
for(j = 2*t - 1; j>=1; j--){
printf("* ");
}
  //换行 

      printf("\n");
}
      return 0;
}


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值