c++习题练习>>排序1<<

tech2024-12-07  6

c++练习题 >>排序1<<

题目要求:输入n个数,将n个数按从小到大的顺序输出(n<=10000)。

输入样例: 8 注:要输入的数的数量 4 5 2 9 8 输出样例: 2 4 5 8 9

//数据排序1 //输入一串数,按从小到大排序 #include<iostream> using namespace std; int main () { int n, num; cin >> n; int a[n] = {0}; //声明一个n位数组 //储存进数组 for (int i = 0; i < n; i++) { cin >> num; a[i] = num; } return 0; }

这里我们要先将所有数存储在数组中。

然后用排序方法将这串数组按从大到小的规则排序,因为从大到小的排列是最方便的,也不容易让初学者在for()语句嵌套中搞得头晕眼花的。

//进行排序(从大到小) int sum1 = 0, sum2 = 0, s; int a2[n] = {0}; //接收数组 int i, j; for (i = 0; i < n; i++) { for (j = 0; j < n; j++) { sum2 = a[j]; if (sum1 < sum2) { sum1 = sum2; s = j; //取数组最大值下标s } } a2[i] = sum1; a[s] = 0; sum1 = 0; }

这里可以返回一个数组a2,并且将所有数从大到小排列。

最后我们只需要用倒序输出的方法输出即可,下面是所有代码。

//数据排序1 //输入一串数,按从小到大排序 #include<iostream> using namespace std; int main () { int n, num; cin >> n; int a[n] = {0}; //声明一个n位数组 //储存进数组 for (int i = 0; i < n; i++) { cin >> num; a[i] = num; } //进行排序(从大到小) int sum1 = 0, sum2 = 0, s; int a2[n] = {0}; //接收数组 int i, j; for (i = 0; i < n; i++) { for (j = 0; j < n; j++) { sum2 = a[j]; if (sum1 < sum2) { sum1 = sum2; s = j; //取数组最大值下标s } } a2[i] = sum1; a[s] = 0; sum1 = 0; } //倒序输出 for (int i = n - 1; i >= 0; i--) { cout << a2[i] << " "; } return 0; }

短短的40行代码却非常考验功底,希望大家能有所收获,谢谢。 (本题来自《信息学奥赛一本通(c++版)》第191页例2.1)

最新回复(0)