選夫婿1
Problem Description
潘小姐不愛名利,只看人,第一關就是身高和體重要合格,即必須在其要求的範圍內,否則直接排除在外,不允許參加下一輪的選拔。
作爲一個程序員,你沒有錢也沒有權,擅長的也就是編程了。潘小姐也發現了這一點,所以把首輪根據身高體重進行選拔的任務交給了你,如果完成的好,你可以直接進入下一輪選拔,你笑了。
Input
潘小姐給你了所有報名男生的信息。輸入數據的第一行是一個正整數N(0 < N < 1000)。然後N行數據,每行包含三部分,用空格隔開。第一部分是報名者的姓名name(長度小於20的字符串),然後是整數身高h(0 < h < 300),第三部分是整數體重w (0 < w < 200)。
最後一行是四個整數a,b,c,d.表示身高的合格範圍是[a,b],體重的合格範圍是[c,d](0 < a < b < 200, 0 < c < d < 300)。
Output
你需要把合格的男生信息按照身高從低到高輸出,格式跟輸入一樣,也是每行三個信息,共N行,如果身高相同則按體重從輕到重輸出,若沒有合格人選則輸出No,具體格式見樣例。
Sample Input
8 武大郎 70 40 西門慶 180 70 李逵 160 150 燕青 175 69 魯智深 180 100 武松 180 75 小泉純一狼 30 20 孫二孃 169 60 165 190 60 90
Sample Output
孫二孃 169 60 燕青 175 69 西門慶 180 70 武松 180 75
Hint
Source
疑惑:我開始用的是兩個sort函數,先遍歷身高排序,再在這個的基礎上遍歷體重排序,結果就是WA,很費解???
#include<iostream> #include<algorithm> #include<cstdio> #include<cstring> using namespace std; struct tt{ char name[20]; int h; int w; }st[1000],str[1000]; bool cmp(tt x,tt y){ if(x.h!=y.h){ return x.h<y.h; } return x.w<y.w; } int main(){ int n; int i; int h1,h2,w1,w2; int flag=0; int m=0; scanf("%d", &n); for(i=0;i<n;i++){ scanf("%s %d %d",st[i].name,&st[i].h,&st[i].w); } scanf("%d %d %d %d",&h1,&h2,&w1,&w2); for(i=0;i<n;i++){ if(st[i].h>=h1&&st[i].h<=h2&&st[i].w>=w1&&st[i].w<=w2){ flag=1; str[m++]=st[i]; } } sort(str,str+m,cmp); if(flag==0){ printf("No\n"); }else{ for(i=0;i<m;i++){ printf("%s %d %d\n",str[i].name,str[i].h,str[i].w); } } return 0; }