解题思路:
根据冒泡排序,四个数排三次;
从第一个数开始,每一个数与它的后一个数比较,大于后一个数则交换;每次交换后最大的数就会在最后一个
比如 :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语言训练-排序问题<1> (C语言代码)浏览:1348 |
简单的a+b (C语言代码)浏览:703 |
C语言训练-求函数值 (C语言代码)浏览:931 |
这可能是一个假的冒泡法浏览:985 |
用筛法求之N内的素数。 (C语言代码)浏览:1225 |
C语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:373 |
简单的a+b (C语言代码)浏览:681 |
C语言程序设计教程(第三版)课后习题1.5 (C++代码)浏览:1078 |
C语言程序设计教程(第三版)课后习题5.7 (C语言代码)浏览:574 |
简单的for循环浏览:1408 |
Manchester 2017-12-14 22:47:45 |
谢谢大佬提醒
Christ 2018-08-22 15:57:14 |
这指针出神入化