1041 考試座位號(15)(15 分)


1041 考試座位號(15)(15 分)

每個PAT考生在參加考試時都會被分配兩個座位號,一個是試機座位,一個是考試座位。正常情況下,考生在入場時先得到試機座位號碼,入座進入試機狀態后,系統會顯示該考生的考試座位號碼,考試時考生需要換到考試座位就座。但有些考生遲到了,試機已經結束,他們只能拿着領到的試機座位號碼求助於你,從后台查出他們的考試座位號碼。

輸入格式:

輸入第一行給出一個正整數N(<=1000),隨后N行,每行給出一個考生的信息:“准考證號 試機座位號 考試座位號”。其中准考證號由14位數字組成,座位從1到N編號。輸入保證每個人的准考證號都不同,並且任何時候都不會把兩個人分配到同一個座位上。

考生信息之后,給出一個正整數M(<=N),隨后一行中給出M個待查詢的試機座位號碼,以空格分隔。

輸出格式:

對應每個需要查詢的試機座位號碼,在一行中輸出對應考生的准考證號和考試座位號碼,中間用1個空格分隔。

輸入樣例:

4
10120150912233 2 4
10120150912119 4 1
10120150912126 1 3
10120150912002 3 2
2
3 4

輸出樣例:

10120150912002 2
10120150912119 1

思考

應該准備一個結構體來保存這個信息,結構體里有一個數組或者字符串,再來兩個數。

這讓我想起了B1016,我使用了字符串,結果使問題復雜化了。

結果14位數字直接用 long long 變量就行了,使用stdint.h會出現很多問題,因為里面是用宏定義的,在使用scanf和printf時會報錯,所以這個位數一定要確保。確保的辦法是??

晴神寶典,真的好,誰用誰知道。

這些坑,新手都可以直接避開了,適合跨考的,時間緊,任務重的。

變量聲明

2147483647

10的9次方以內,int;10的18次方以內,long long

在賦初值是,太大的要加上LL,這個我確實不知道。

關於c語言里的常量問題,晴神建議使用const這一c++的寫法,但是我需要純正的c語言,最好是ansi c的標准來編程,於是就常常使用宏定義替換了。A1042里面遇到了這個問題。

其實int 32位是long int的簡寫,long long 是long long int 的簡寫,所以long long 都是64位,而int未必是32位

當int是16位時,使用long來表示32位

1.c語言整數類型的大小並沒有精確的定義,而是隨着編譯器的類型而變化,ANSI C能保證的只是數據的最小尺寸。char>=8位,short>=16位,int>=16位,long>=32位。

2.因此,可以用typedef定義int16和int32,然后根據實際的機器環境把它們定義為int,short,long等類型。但是,標准頭文件<inttypes.h>已經定義了標准名稱int16_t,uint32_t等。

AC代碼

#include<stdio.h>
#define maxn 1010
struct student{
	long long id;//准考證號
	int examSeat;//考試座位號 
}testSeat[maxn];//試機座位號作為下標來記錄考生 
int main(){
	int N;
	int n,m,seat,examSeat;
	long long id; 
	scanf("%d",&N);
	for(int i=0;i<N;i++){
		scanf("%lld %d %d",&id,&seat,&examSeat);//准考證號、試機座位號、考試座位號 
		testSeat[seat].id=id;//這里不能簡化為一條語句,因為seat值未知 
		testSeat[seat].examSeat =examSeat; 
	}
	scanf("%d",&m);//查詢個數 
	for(int i=0;i<m;i++){
		scanf("%d",&seat);
		printf("%lld %d\n",testSeat[seat].id, testSeat[seat].examSeat );
		
	}
	return 0;
} 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM