1055 集體照 (25分)
拍集體照時隊形很重要,這裡對給定的 n 個人 k 排的隊形設計排隊規則如下:
現給定一組拍照人,請編寫程式輸出他們的隊形。
每個輸入包含 1 個測試用例。每個測試用例第 1 行給出兩個正整數 n(≤,總人數)和 k(≤,總排數)。隨後 n 行,每行給出乙個人的名字(不包含空格、長度不超過 8 個英文本母)和身高([30, 300] 區間內的整數)。
輸出拍照的隊形。即k排人名,其間以空格分隔,行末不得有多餘空格。注意:假設你面對拍照者,後排的人輸出在上方,前排輸出在下方。
10 3
tom 188
mike 170
eva 168
tim 160
joe 190
ann 168
bob 175
nick 186
amy 160
john 159
bob tom joe nick
ann mike eva
tim amy john
思路:
身高按降序排,同樣身高按字母順序排(要用到strcmp,不是直接比較首字母ascii值),然後每排先找到中間人位置,以中間人為基準,先左後右依次將排好的序列乙個乙個加入即可
首次通過**:
1 #include2 #includeview code3int flag=1;4
int counter=0;5
int distance=1;6
void swap(int *a,int i,int j)
11void sort(int *height,int *sorted_num,char name[10],int student_sum)
18else
if(height[j]==height[j-1]&&strcmp(name[sorted_num[j]],name[sorted_num[j-1]])<0)
22else
break;23
}24}25
int judge_now_position(int
mid_num)
33else
38if(counter==2
) 42
return
now_position;43}
44int
main()
58sort(height1,sorted_num,name,student_sum);
59//
最後一排(身高最高)排序
60int
mid_num;
61int now_position;int
now_height_sum;
62for(int i=0;i)
68else74}
7576
for(int i=0;i)
8081
if(last_row_sum
82 printf("\n"
);83
else
return0;
84 flag=1;distance=1;counter=0
; 85
86//
前排排序
87for(int i=last_row_sum;ievery_row_sum)
93else
97}98 flag=1;distance=1;counter=0
; 99
}100
for(int i=last_row_sum;ievery_row_sum)
105if(i!=student_sum-every_row_sum) printf("\n"
);106
}107
return0;
108 }
參考from:
PAT乙級 1055 集體照 25分
拍集體照時隊形很重要,這裡對給定的 n 個人 k 排的隊形設計排隊規則如下 輸入格式 每個輸入包含 1 個測試用例。每個測試用例第 1 行給出兩個正整數 n 10 4 總人數 和 k 10,總排數 隨後 n 行,每行給出乙個人的名字 不包含空格 長度不超過 8 個英文本母 和身高 30,300 區間...
PAT乙級 1055 集體照 25
時間限制 400 ms 記憶體限制 65536 kb 長度限制 8000 b 判題程式 standard 作者 chen,yue 拍集體照時隊形很重要,這裡對給定的n個人k排的隊形設計排隊規則如下 現給定一組拍照人,請編寫程式輸出他們的隊形。輸入格式 每個輸入包含1個測試用例。每個測試用例第1行給出...
PAT乙級1055 集體照 25
拍集體照時隊形很重要,這裡對給定的n個人k排的隊形設計排隊規則如下 每排人數為n k 向下取整 多出來的人全部站在最後一排 後排所有人的個子都不比前排任何人矮 每排中最高者站中間 中間位置為m 2 1,其中m為該排人數,除法向下取整 每排其他人以中間人為軸,按身高非增序,先右後左交替入隊站在中間人的...