【問題描述】某班級要進行期末考試,準備考試時打亂座次,現已按照學號順序人工為學生隨機安排了座位號,但其中可能會出現漏排和重複安排座位的情況。編寫程式讀入人工安排的考試座位安排表t1,對安排情況進行檢查,並對漏排和重複安排座位的情況進行修正,修正後,若學生人數為n,則每位學生考試座位安排應在1~n之間,其中沒有缺號和重號。假設t1中學號資訊不會出現重複,同一座位號最多有兩位同學的座位號相同,並且座位號不會連續漏排;初始考試座位安排表存放在當前目錄下的in.txt中,其中包括每位學生的學號、姓名和座位號,要求修正後的考試座位安排表輸出到當前目錄下的out.txt檔案中。程式檢查座位號的規則如下:
1、首先對考試座位安排表t1按座位號從小到大的順序排序(原始考試安排可能有座位號相同情況,座位號相同時則按原始學號順序排序),得到按座位號排序的安排表t2;
2、對錶t2從頭開始檢查漏排座位號情況:假設當前表中安排的最大座位號為m,取m和n的較小值q;從1號開始檢查,若某個小於等於q的座位序號沒有安排學生,則將表t2的最後學生的座位設定為該座位號;若存在多個漏排座位,則從表t2最後依次向前設定;
3、然後再檢查表t2中重排座位號情況:假設當前表中安排的最大座位號為m,將座位號重複的、學號較大的學生的座位號依次設定為m+1、m+2、m+3…;
將調整好的表t2按學號由小到大序排序後按輸出格式要求輸出至指定輸出檔案中。
【輸入形式】
從標準輸入中讀入學生人數(不超過100的正整數)。
初始考試座位安排表儲存在當前目錄下的in.txt檔案中,已按照學號由小到大的順序分行儲存每位學生座位資訊,依次為學生學號(不超過8位的正整數)、姓名(由不超過20位的英文本母組成)和座位號(不超過100的正整數),各資料間以乙個空格分隔。最後乙個學生座位資訊後有回車換行。
【輸出形式】
按照學號由小到大的順序將修正後的考試座位安排表輸出到當前目錄下的out.txt檔案中,每行依次為學號、姓名和座位號,各資料之間以乙個空格分隔。
【樣例輸入】
假設當前目錄下的in.txt檔案內容如下:
18373001 ****ian 7
18373002 wangli 15
18373003 liguohong 23
18373005 qiansanqiang 26
18373006 zhangqiang 8
18373007 sunxixi 2
18373010 lixing 12
18373011 tangying 20
18373012 yangyang 4
18373013 zhaogang 27
18373014 zhouliang 18
18373015 wushuo 9
18373016 zhengsisi 13
18373017 wanggong 27
18373018 tiantian 21
18373020 leilei 16
18373021 zhanglou 10
18373022 wanglei 17
18373025 suntian 24
18373026 jinxiang 18
18373028 panghong 11
18373029 gaoliang 2
18373030 gaohang 6
18373031 yangyang 22
【樣例輸出】
當前目錄下的out.txt檔案內容應為:
18373001 ****ian 7
18373002 wangli 15
18373003 liguohong 19
18373005 qiansanqiang 5
18373006 zhangqiang 8
18373007 sunxixi 2
18373010 lixing 12
18373011 tangying 20
18373012 yangyang 4
18373013 zhaogang 3
18373014 zhouliang 18
18373015 wushuo 9
18373016 zhengsisi 13
18373017 wanggong 1
18373018 tiantian 21
18373020 leilei 16
18373021 zhanglou 10
18373022 wanglei 17
18373025 suntian 14
18373026 jinxiang 24
18373028 panghong 11
18373029 gaoliang 23
18373030 gaohang 6
18373031 yangyang 22
【樣例說明】
初始考試座位安排表中有24位學生的排位資訊,正確情況下這些學生安排的座位號應為1~24。初始人工安排的座位資訊有1、3、5、14和19號座位漏排,有2、18和27號座位重複安排學生。先對漏排的座位進行修正:已安排的最大座位號為27,學號為18373017和18373013的學生分別安排了27號座位,按照漏排座位修正規則,先將18373017學生安排在1號座位,再將18373013學生安排在3號座位;同理分別將18373005學生安排在5號座位,將18373025學生安排在14號座位,18373003號學生安排在19號座位。當前安排的最大座位號為22,還有2號和18號座位重複,將2號重複的學號較大的18373029號學生安排在23號座位,將18號重複的學號較大的18373026號學生安排在24號座位。這樣修正後按照學號由小到大的順序輸出學生座位資訊到out.txt中。
方法一
#include
#include
#include
#define min(a, b) ((a) < (b) ? (a) : (b))
struct member
one[
101]
, temp;
int i, j, n, min, after;
intcmp1
(struct member *x,
struct member *y)
intcmp2
(struct member *x,
struct member *y)
intmain
(void
)
方法二
#include
#include
#include
#include
#include
#include
struct node
a[200
], temp;
intcmp_1
(const
void
*p,const
void
*q)return1;
}int
cmp_2
(const
void
*p,const
void
*q)int
main()
qsort
(a, n,
sizeof
(struct node)
, cmp_1)
;int m =
0, t = n -1;
m =(n)<
(a[n -1]
.seat)
?(n)
:(a[n -1]
.seat)
;for
(int i =
0; i < m; i++)if
(a[i]
.seat - a[i -1]
.seat >1)
} t = a[t]
.seat;
i =0;
while
(m - i)
i++;}
qsort
(a, n,
sizeof
(struct node)
, cmp_2)
;for
(int i =
0; i < n; i++
)}
buaaer? 1971 安排座位
time limit 2 sec memory limit 128 mb submitted 331 solved 227 一年一度的暑期集訓又開始了!作為老人的小明非常憂傷,因為他要給所有的新人安排座位。由於安排給新人的座位上的機器可能有各種毛病 比如很卡,上不了網之類的 這些問題的出現都會讓新人...
排座位 (25 分)
7 40 排座位 25 分 布置宴席最微妙的事情,就是給前來參宴的各位賓客安排座位。無論如何,總不能把兩個死對頭排到同一張宴會桌旁!這個艱鉅任務現在就交給你,對任何一對客人,請編寫程式告訴主人他們是否能被安排同席。輸入第一行給出3個正整數 n 100 即前來參宴的賓客總人數,則這些人從1到n編號 m...
天梯賽 排座位
l2 010 排座位 25分 布置宴席最微妙的事情,就是給前來參宴的各位賓客安排座位。無論如何,總不能把兩個死對頭排到同一張宴會桌旁!這個艱鉅任務現在就交給你,對任何一對客人,請編寫程式告訴主人他們是否能被安排同席。輸入格式 輸入第一行給出3個正整數 n 100 即前來參宴的賓客總人數,則這些人從1...