原题链接: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、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
#include <stdio.h> void jiaohuan(int *a,int *b) { if(*a>*b) *a=*b+*a-(*b=*a); } int main(void) { int a1=5,b1=4; jiaohuan(&a1,&b1); printf("%d %d",a1,b1); }