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 ...