合影效果
依旧将男生女生分开存储即可,方便分别排序。
#include<bits/stdc++.h> using namespace std; int main(){ double male[40] = {0.00,0.00},female[40] = {0.00,0.00}; int i = 0,j = 0; int n; cin >> n; for(int now = 1;now<=n;now++){ string sex = ""; double h; cin >> sex >> h; if(strcmp(sex.c_str(),"male") == 0){male[i] = h;i++;} else{female[j] = h;j++;} } sort(male,male + i);//男生升序排列 sort(female,female + j,greater<double>());//女生降序排列 for(int m=0;m<i;m++) printf("%.2lf"" ",male[m]); for(int m=0;m<j;m++) printf("%.2lf"" ",female[m]); return 0; }病人排队
将老年人与非老年人分开存储。非老年人只输出ID且按照输入顺序输出,所以只定义了非成年人的ID。老年人要按照年龄排序,所以定义了old,ID_old,与order三个数组分别存储老年人年龄,ID和登记顺序。
在存储数据后对老年人数组进行排序,按照年龄降序排,也要将对应的登记顺序进行交换。若年龄相同,按照登记顺序排序,小的在前,交换ID和登记顺序。最后输出即可。
#include<bits/stdc++.h> using namespace std; int main(){ int n,old[100] = {0,0,0};//老年人年龄 int order[100] = {0,0,0};//登记顺序 cin >> n; string ID_old[100];//老年人ID string ID_dult[100];//非老年人ID int o1 = 0,o2 = 0; for(int i=0;i<n;i++){ int year; string ID = ""; cin >> ID >> year; if(year >= 60){old[o1] = year;ID_old[o1] = ID;order[o1] = i;o1++;}//存储老年人的年龄和ID else{ID_dult[o2] = ID;o2++;}//存储非老年人的ID } for(int i=0;i<o1;i++){//对老年人排序 for(int j=i;j<o1;j++){ if(old[i] < old[j]){ int t = old[i];//年龄交换顺序 old[i] = old[j]; old[j] = t; int k = order[i];//登记顺序交换 order[i] = order[j]; order[j] = k; string now = ID_old[i];//ID交换顺序 ID_old[i] = ID_old[j]; ID_old[j] = now; } else if(old[i] == old[j]){//年龄相同时,按照登记顺序排序 if(order[i] > order[j]){ int k = order[i];//登记顺序交换 order[i] = order[j]; order[j] = k; string now = ID_old[i];//ID交换顺序 ID_old[i] = ID_old[j]; ID_old[j] = now; } } } } for(int i=0;i<o1;i++){ cout << ID_old[i] << endl; } for(int i=0;i<o2;i++){ cout << ID_dult[i] << endl; } return 0; }