1111: 零起点学算法18——3个数比较大小

男娘i 2023-01-10 11:56 225阅读 0赞

Description

输入3个整数(最长有15位),将它们从大到小输出

Input

输入3个整数(最长为15位)(多组数据)

Output

从大到小输出,中间用空格隔开(每组数据一行)

" class="reference-link">Sample Input 5f8f312f51791b8bb0ed0ae07c2ffa43.gif

  1. 2 5 1

Sample Output

  1. 5 2 1

HINT

int is not enough

long long is enough

Source

零起点学算法

Code

  1. #include<stdio.h>
  2. #include<iostream>
  3. using namespace std;
  4. int main()
  5. {
  6. long long a,b,c;
  7. long long t1,t2,t3;
  8. while(~scanf("%lld%lld%lld",&a,&b,&c))
  9. {
  10. if(a>=b)
  11. {
  12. t1=a;
  13. t2=b;
  14. }
  15. else
  16. {
  17. t1=b;
  18. t2=a;
  19. }
  20. if(c>=t1)
  21. {
  22. t3=t2;
  23. t2=t1;
  24. t1=c;
  25. }
  26. else
  27. {
  28. if(c>=t2)
  29. {
  30. t3=t2;
  31. t2=c;
  32. }
  33. else
  34. t3=c;
  35. }
  36. cout<<t1<<" "<<t2<<" "<<t3<<endl;
  37. }
  38. }

这一题感觉我做的太复杂了,我按照大小顺序将变量分别赋给了t1,t2,t3,但其中涉及到了太多次比较?使用了三个中间变量

于是去看了看别人的代码,只用了一个中间变量,直接把abc充当了t1t2t3的角色,根据字母越前值越大的规律进行交换赋值

  1. #include<stdio.h>
  2. #include<iostream>
  3. using namespace std;
  4. int main()
  5. {
  6. long long a,b,c;
  7. long long t;
  8. while(~scanf("%lld%lld%lld",&a,&b,&c))
  9. {
  10. ///如果c>a,那么ac就交换位置,保证字母在前的更大
  11. if(c>a)
  12. {
  13. t=c;
  14. c=a;
  15. a=t;
  16. }
  17. if(c>b)
  18. {
  19. t=c;
  20. c=b;
  21. b=t;
  22. }
  23. if(b>a)
  24. {
  25. t=a;
  26. a=b;
  27. b=t;
  28. }
  29. cout<<a<<" "<<b<<" "<<c<<endl;
  30. }
  31. }

至于三个if的顺序没有太大的关系,这三个if进行了充分的变化,无论顺序都能排序正确

这也是冒泡排序的做法,把越大的数向上冒泡。

发表评论

表情:
评论列表 (有 0 条评论,225人围观)

还没有评论,来说两句吧...

相关阅读