問題鏈接:CCF NOI1051 合影。
ijcai ccf?時間限制: 1000 ms ?空間限制: 262144 KB
題目描述?
? 小云和朋友們去爬香山,為美麗的景色所陶醉,想合影留念。如果他們站成一排,男生全部在左(從拍照者的角度),并按照從矮到高的順序從左到右排,女生全部在右,并按照從高到矮的順序從左到右排,請問他們合影的效果是什么樣的(所有人的身高都不同)?
輸入
? 第一行是人數n(2 <= n <= 40,且至少有1個男生和1個女生)。
? 后面緊跟n行,每行輸入一個人的性別(男male或女female)和身高(浮點數,單位米),兩個數據之間以空格分隔。
輸出
? n個浮點數,模擬站好隊后,拍照者眼中從左到右每個人的身高。每個浮點數需保留到小數點后2位,相鄰兩個數之間用單個空格隔開。
樣例輸入
6
male 1.72
male 1.78
female 1.61
male 1.65
female 1.70
female 1.56
樣例輸出
1.65 1.72 1.78 1.70 1.61 1.56
數據范圍限制
?
提示
?
? 這是一個排序問題,排序后輸出結果即可。
? 可以采用男女分別存儲排序,分別輸出。這里的給出的兩個程序就是采用這種方法。
? 另外一種方法是所有數據一起排序(需要帶上性別),然后兩次順序讀一遍(一次從大到小,另外一次從小到大),就可以得到想要的結果。這個思路的程序還沒有做。
程序說明
? 這里給出C語言程序和C++語言程序。它們的排序函數不一樣,需要注意。
? 想比較而言,C++語言的排序函數sort()使用起來比較簡潔。
要點詳解
100分通過的C語言程序:
#include <stdio.h>
#include <stdlib.h>#define N 40float male[N], female[N];int cmp1( const void *a , const void *b )
{return *(float *)a > *(float *)b ? 1 : -1;
}int cmp2( const void *a , const void *b )
{return *(float *)a < *(float *)b ? 1 : -1;
}int main(void)
{int n, nm, nf, i;char sex[7];scanf("%d", &n);for(i=0,nm=0,nf=0; i<n; i++) {scanf("%s%f", sex, &male[nm]);if(sex[0] == 'm')nm++;elsefemale[nf++] = male[nm];}qsort(male, nm, sizeof(float), cmp1);qsort(female, nf, sizeof(float), cmp2);for(i=0; i<nm; i++)printf("%.2f ", male[i]);for(i=0; i<nf; i++)printf("%.2f ", female[i]);printf("\n");return 0;
}
100分通過的C++語言程序:
#include <iostream>
#include <algorithm>
#include <cstdio>using namespace std;const int N = 40;float male[N], female[N];int main()
{int n, nm, nf;char sex[7];cin >> n;nm = nf = 0;for(int i=0; i<n; i++) {cin >> sex >> male[nm];if(sex[0] == 'm')nm++;elsefemale[nf++] = male[nm];}sort(male, male + nm, less<float>());sort(female, female + nf, greater<float>());for(int i=0; i<nm; i++)printf("%.2f ", male[i]);for(int i=0; i<nf; i++)printf("%.2f ", female[i]);printf("\n");return 0;
}
版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。
工作时间:8:00-18:00
客服电话
电子邮件
admin@qq.com
扫码二维码
获取最新动态