A-L1-2-第14讲-选择排序
2479 对n个数字排序
描述
输入n个整数( 1≤n≤100 ),存入数组a中,每个整数的范围1~1000,按从小到大的顺序输出数组a中的数据。
输入描述
第一行输入数字n,表示有n个数字;
第二行输入n个数字,用空格隔开。
输出描述
输出一行从小到大排好序的n个数字,使用空格隔开。
样例输入 1
10 5 3 2 2 1 1 4 5 9 4
样例输出 1
1 1 2 2 3 4 4 5 5 9
样例输入 2
20 100 72 76 79 38 54 28 55 14 1 53 1 39 46 67 8 48 14 85 51
样例输出 2
1 1 8 14 14 28 38 39 46 48 51 53 54 55 67 72 76 79 85 100
#include <bits/stdc++.h>
using namespace std;
int main(){
//解码时刻01:对n个数升序排序
int n;
cin >> n;
int a[100]={0};
for(int i=0;i<n;i++){
cin>>a[i];
}
for(int i=0;i<n-1;i++){
for(int j=i+1;j<n;j++){
if(a[i]>a[j]){
swap(a[i],a[j]);
}
}
}
for(int i=0;i<n;i++){
cout<<a[i]<<" ";
}
return 0;
}
2480 身高排序
描述
从键盘输入n个学生的身高,保存在一个数组中,身高的单位是cm,取值范围110~190,将身高按照从高到低的顺序排序输出。
输入描述
第一行,一个整数n,表示n个人,1≤n ≤ 1000;
第二行,n个整数,表示n个人的身高,每个整数的范围110~190。
输出描述
一行n个整数,从大到小排列。
样例输入 1
5 126 137 168 126 154
样例输出 1
168 154 137 126 126
#include <bits/stdc++.h>
using namespace std;
int main(){
//亲自出码01:身高降序排序
int n;
cin>>n;
int a[1000]={0};
for(int i=0;i<n;i++){
cin>>a[i];
}
for(int i=0;i<n-1;i++){
for(int j=i+1;j<n;j++){
if(a[i]<a[j]){
swap(a[i],a[j]);
}
}
}
for(int i=0;i<n;i++){
cout<<a[i]<<" ";
}
return 0;
}
2482 病人排队
描述
病人登记看病,每个病人都需要输入登记号和年龄。编写一个程序,将登记的病人按照年龄大小排队,年龄大的优先看病,输出看病的先后顺序,包括病人的登记号和年龄。
输入描述
第1行,输入一个小于100的正整数n,表示病人的个数;
后面n行,每行两个数据。第一个整数表示病人的登记号(例:1001,保证登记号各不相同),第二个整数表示病人的年龄(保证年龄各不相同),中间用单个空格隔开。
输出描述
n行数据,按排好的顺序输出病人信息,每行数据代表一个病人的信息,每行包含两个数据:病人的登记号和年龄,中间用空格隔开。
样例输入 1
5 1004 40 1002 15 1001 67 1003 75 1005 30
样例输出 1
1003 75 1001 67 1004 40 1005 30 1002 15
样例输入 2
5 1011 70 1032 35 1044 28 1008 29 1019 51
样例输出 2
1011 70 1019 51 1032 35 1008 29 1044 28
#include <bits/stdc++.h>
using namespace std;
int main(){
//病人排队
int num[101]={0},age[101]={0};
int n;
cin>>n;
for(int i=1;i<=n;i++){
cin>>num[i]>>age[i];
}
for(int i=1;i<n;i++){
for(int j=i+1;j<=n;j++){
if(age[i]<age[j]){
//交换年龄
swap(age[i],age[j]);
//交换序号
swap(num[i],num[j]);
}
}
}
for(int i=1;i<=n;i++){
cout<<num[i]<<" "<<age[i]<<endl;
}
return 0;
}
2481 奖学金问题
描述
某小学最近得到一笔赞助,打算拿出其中一部分为学习成绩优秀的前五名学生发放奖学金。每名学生都有三门课的成绩:语文、数学、英语。先按总分从高到低排序,如果总分相同,规定学号小的同学排在前面。
任务要求:根据输入的3门课的成绩计算总分,然后按上述规则排序,最后按排名顺序输出前五名学生的学号和总分。
输入描述
包含n+1行,第一行为一个正整数n(n≤100),表示该校参加评选的学生人数。第2到n+1行,每行3个用空格隔开的数字(0~100之间),代表对应学号学生的语文、数学、英语成绩,学号按输入的顺序编号。
输出描述
共五行,每行是一个用空格隔开的正整数,依次表示前五名学生的学号和总分。
样例输入 1
6 90 67 80 87 66 91 78 89 91 88 99 77 67 89 64 78 89 98
样例输出 1
6 265 4 264 3 258 2 244 1 237
样例输入 2
8 78 89 91 88 98 78 90 67 80 87 66 91 80 89 89 88 99 77 67 89 64 78 89 98
样例输出 2
8 265 2 264 6 264 1 258 5 258
#include <bits/stdc++.h>
using namespace std;
int main(){
//快码加鞭:奖学金
int num[101]={0},sum[101]={0};
int a,b,c;
int n;
cin>>n;
for(int i=1;i<=n;i++){
cin>>a>>b>>c;
num[i]=i;
sum[i]=a+b+c;
}
for(int i=1;i<n;i++){
for(int j=i+1;j<=n;j++){
if(sum[i]<sum[j]){
//交换总分
swap(sum[i],sum[j]);
//交换学号
swap(num[i],num[j]);
}else if(sum[i]==sum[j]&&num[i]>num[j]){
//交换学号
swap(num[i],num[j]);
}
}
}
for(int i=1;i<=5;i++){
cout<<num[i]<<" "<<sum[i]<<endl;
}
return 0;
}