原题链接:C语言训练-排序问题(1)
解题思路:
根据冒泡排序,四个数排三次;
从第一个数开始,每一个数与它的后一个数比较,大于后一个数则交换;每次交换后最大的数就会在最后一个
比如 :5 4 3 2
第一次:4 3 2 5
第二次:3 2 4
第三次: 2 3
注意事项:
a = a + b;
b = a - b;
a = a - b;
这种交换方式在有些情况下容易产生逻辑错误,请酌情使用,比如在数组中交换时,详情见排序问题<2>
#include <iostream> using namespace std; int main() { int a, b, c, d; cin >> a >> b >> c >> d; /*---------------------------------------*/ if ( a > b ) { a = a + b; b = a - b; a = a - b; } if ( b > c ) { b = b + c; c = b - c; b = b - c; } if ( c > d ) { c = c + d; d = c - d; c = c - d; } /*---------------------------------------*/ if ( a > b ) { a = a + b; b = a - b; a = a - b; } if ( b > c ) { b = b + c; c = b - c; b = b - c; } /*---------------------------------------*/ if ( a > b ) { a = a + b; b = a - b; a = a - b; } /*---------------------------------------*/ cout << a << " " << b << " " << c << " " << d; }
综合:
#include <iostream> using namespace std; int main() { int a[4]; for ( int i = 0; i < 4; i++ ) cin >> a[i]; for ( int i = 0; i < 4; i++ ) { for ( int j = 0; j < 4 - i - 1; j++ ) { if ( a[j] > a[j + 1] ) { a[j] = a[j] + a[j + 1]; a[j + 1] = a[j] - a[j + 1]; a[j] = a[j] - a[j + 1]; } } } for ( int i = 0; i < 3; i++ ) cout << a[i] << " "; cout << a[3]; }
0.0分
0 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复