1069 查詢學生的資訊

2021-08-14 12:32:02 字數 1776 閱讀 8669

2003清華大學計算機研究生機試真題

題目描述:

輸入n個學生的資訊,然後進行查詢。

輸入:輸入的第一行為n,即學生的個數(n<=1000),接下來的n行包括n個學生的資訊,資訊格式如下:

01 李江 男 21

02 劉唐 男 23

03 張軍 男 19

04 王娜 女 19

然後輸入乙個m(m<=10000),接下來會有m行,代表m次查詢,每行輸入乙個學號,格式如下:

02 03

01 04

輸出:輸出m行,每行包括乙個對應於查詢的學生的資訊。如果沒有對應的學生資訊,則輸出「no answer!」

樣例輸入:

4 01 李江 男 21

02 劉唐 男 23

03 張軍 男 19

04 王娜 女 19

5 02

03 01

04 03

樣例輸出:

02 劉唐 男 23

03 張軍 男 19

01 李江 男 21

04 王娜 女 19

03 張軍 男 19

我們可以參考前面做過的題目,建立乙個結構體儲存資訊,然後建立乙個字元陣列放要查詢的學號,依次遍歷與輸入的比較看是否存在,如果存在就輸出所有資訊,否則到頭也沒有就輸出「no answer!」。

ac**如下:

#include 

#include

#include

using

namespace

std;

struct stu

buf[1001];

int main()

int t;

scanf("%d",&t);

char x[100];

int j;

for(int i=0;iscanf("%s",x);

for(j=0;jif(strcmp(buf[j].no,x)==0)

}if(j==n)

printf("no answer!\n");}}

return

0; }/*4

01 李江 男 21

02 劉唐 男 23

03 張軍 男 19

04 王娜 女 19502

0301

0403

*/

為了降低時空複雜度我們可以採用二分查詢來實現查詢部分,具體的ac**如下:

#include 

#include

#include

#include

using

namespace

std;

struct stu

}buf[1000];

int main()

//按學號公升序排列便於使用二分查詢

sort(buf,buf+n);

int t;

scanf("%d",&t);

//保證查詢次數為t

while(t--!=0)else

if(tmp>0)else

base=mid+1;

}if(ans==-1)else

printf("%s %s %s %d\n",buf[ans].no,buf[ans].name,buf[ans].***,buf[ans].age);}}

return

0; }

注意:二分查詢是建立在有序的前提下,故需要我們在查詢前進行一次排序。

題目1069 查詢學生資訊

題目描述 輸入n個學生的資訊,然後進行查詢。輸入 輸入的第一行為n,即學生的個數 n 1000 接下來的n行包括n個學生的資訊,資訊格式如下 01 李江 男 21 02 劉唐 男 23 03 張軍 男 19 04 王娜 女 19 然後輸入乙個m m 10000 接下來會有m行,代表m次查詢,每行輸入...

題目1069 查詢學生資訊 題目18

不再貼了,這道題需要注意 學號不能用int表示,其可能為100位,名字的長度也要夠長 坑 其次輸入的資訊不是排好序的,需要自己排序再用二分法查詢!題目描述 輸入n個學生的資訊,然後進行查詢。輸入 輸入的第一行為n,即學生的個數 n 1000 接下來的n行包括n個學生的資訊,資訊格式如下 01 李江 ...

九度1069 查詢學生資訊(折半 線性查詢)

題目1069 查詢學生資訊 時間限制 1 秒 記憶體限制 32 兆 特殊判題 否 提交 7855 解決 2124 題目描述 輸入n個學生的資訊,然後進行查詢。輸入 輸入的第一行為n,即學生的個數 n 1000 接下來的n行包括n個學生的資訊,資訊格式如下 01 李江 男 21 02 劉唐 男 23 ...