題目1069 查詢學生資訊

2021-06-16 12:57:33 字數 1736 閱讀 1452

題目描述:輸入n個學生的資訊,然後進行查詢。

輸入:輸入的第一行為n,即學生的個數(n<=1000)

接下來的n行包括n個學生的資訊,資訊格式如下:

01 李江 男 21

02 劉唐 男 23

03 張軍 男 19

04 王娜 女 19

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

0203

0104

輸出:輸出m行,每行包括乙個對應於查詢的學生的資訊。

如果沒有對應的學生資訊,則輸出「no answer!」

樣例輸入:

4

01 李江 男 21

02 劉唐 男 23

03 張軍 男 19

04 王娜 女 19502

0301

0403

樣例輸出:

02 劉唐 男 23

03 張軍 男 19

01 李江 男 21

04 王娜 女 19

03 張軍 男 19

**:

#include #include #include using namespace std;

struct student stu[1001];

bool cmp(student a, student b)

int main()

else if(tmp>0)

high = mid - 1;

else

low = mid + 1;

}if(ans == -1)

printf("no answer!\n");

else

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

return 0;

}

本題,剛開始容易想成在陣列中按普通的方法查詢(線性遍歷)特定字段。但是要注意演算法複雜度。100000 * 1000 已經超過了千萬的級別,因此不符合題目的要求。

那麼應該怎麼辦?沒錯,就是二分查詢,每次查詢的複雜度為o(lgn)。

1.對陣列元素按學號的公升序排列,可以用sort函式。

2.使用二分查詢特定的元素是否存在。二分查詢中,while迴圈的迴圈條件為high>=low。

3.定義乙個ans,目的下標值,初始為-1。

二分查詢除了用於查詢某特定元素是否存在外,還有乙個主要應用,即定界。如:在乙個有序序列中,尋找乙個下標點,使在該下標點以下(包括自己)的數字均小於等於目標數字,陣列的其餘部分大於目標數字。

int low=0,high=size;

while(low<=high)

int ans = high;

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

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

1069 查詢學生的資訊

2003清華大學計算機研究生機試真題 題目描述 輸入n個學生的資訊,然後進行查詢。輸入 輸入的第一行為n,即學生的個數 n 1000 接下來的n行包括n個學生的資訊,資訊格式如下 01 李江 男 21 02 劉唐 男 23 03 張軍 男 19 04 王娜 女 19 然後輸入乙個m m 10000 ...

九度oj 題目1069 查詢學生資訊 字典

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