Run ID 作者 问题 语言 测评结果 时间 内存 代码长度 提交时间
60051 wangwei 合影效果 C++ 通过 0 MS 252 KB 2338 2025-01-09 16:17:57

Tests(1/1):


#include<bits/stdc++.h> using namespace std; /* 男生、女生身高存储到两个数组里,男生女生身高分开排序 使用函数实现归并排序的功能:flag=1,升序;flag=2,降序 */ double male[40],female[40],b[40]; int mi=0,fi=0; //两个数组的下标 // 对序列a中[left, right]内的元素进行归并排序 void mergeSort(double a[],int left, int right,int flag) { if(left == right) return; // 计算序列分割点 int mid = (left + right) / 2; // 对两个子序列分别进行归并排序:直接调用函数 mergeSort(a, left, mid, flag); //对序列的左半部分元素进行归并排序 mergeSort(a, mid+1, right, flag); //对序列的右半部分元素进行归并排序 // 合并两个有序子序列为一个有序序列 int i = left, j = mid+1, index = left; //只要两个子序列都有剩余元素没有遍历 while(i <= mid && j <= right) { // 如果升序,且子序列①中元素较小,就存储a[i] // 如果降序,且子序列①中元素较大,也存储a[i] if(((flag == 1) && (a[i] < a[j])) || ((flag == 2) && (a[i] > a[j]))) b[index++] = a[i++]; else b[index++] = a[j++]; } //若其中一个子序列中还有剩余元素,依次存入 while(i <= mid) //第一个子序列剩余 b[index++] = a[i++]; while(j <= right) b[index++] = a[j++]; // b[]→a[]:将排序好的元素依次复制到原数组中 for(int i = left; i <= right; i ++) a[i] = b[i]; } int main(){ int n; string gender; double height; // 在输入的时候,将身高存放到两个数组里 cin>>n; for(int i = 0; i < n; i ++) { cin>>gender>>height; if(gender == "male") male[mi++] = height; else female[fi++] = height; } // 先升序排序男生 mergeSort(male,0,mi-1,1); // 再降序排序女生 mergeSort(female,0,fi-1,2); // 输出结果 for(int i = 0; i < mi; i ++) cout<<fixed<<setprecision(2)<<male[i]<<" "; for(int i = 0; i < fi; i ++) cout<<fixed<<setprecision(2)<<female[i]<<" "; return 0; }


测评信息: