PAT乙級1055 集體照 25分

2022-09-19 01:57:09 字數 2029 閱讀 3541

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 #include

3int 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 }

view code

參考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為該排人數,除法向下取整 每排其他人以中間人為軸,按身高非增序,先右後左交替入隊站在中間人的...