【九度】题目1069:查找学生信息

本文介绍了一个简单的学生信息查询算法实现,使用二分查找法在已排序的学生数据中快速定位特定学号的学生信息,并通过示例展示了算法的具体运作过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

时间限制:1 秒

内存限制:32 兆

特殊判题:

提交:14429

解决:3921

题目描述:

 输入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
// **很简单的查找问题,对于有序表进行二分查找。
**对于循环有了更深刻的理解,while(m--!=0),执行m次。
//

#include "stdafx.h"
#include <algorithm>
using namespace std;
struct Info
{int num;
 char name[30];
  char gender[4];
  int age;
}buf[10001];
bool cmp(Info a,Info b){
return a.num<b.num;
}
int _tmain(int argc, _TCHAR* argv[])
{int n;

while (scanf("%d",&n))
{for(int i =0;i<n;i++){
	scanf("%d%s%s%d",&buf[i].num,&buf[i].name,&buf[i].gender,&buf[i].age);
}
sort(buf,buf+n,cmp);
int m;
scanf("%d",&m);

while (m--!=0)
{ int answer=-1;
 int x;
 scanf("%d",&x);
int top=n-1,base=0;

while(top>=base){
int mid=(top+base)/2;
if(buf[mid].num==x){
	answer=mid;
	break;
}
else if(buf[mid].num>x){
	top=mid-1;
}
else
{
	base=mid+1;
}
}

if (answer==-1)
{
	printf("No Answer!");
}
else
	printf("%d %s %s %d\n",buf[answer].num,buf[answer].name,buf[answer].gender,buf[answer].age);
}
}
	return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值