0
点赞
收藏
分享

微信扫一扫

1261: C语言8.27


题目描述


用函数分别实现下列的功能:

(1)     输入10个职工的姓名和职工号;

(2)     按照职工号由小到大的顺序排序,注意需要随之调整姓名顺序;

(3)     输入一个职工号,用折半查找法找出该职工的姓名,要求通过主函数输入要查找的职工号,同时从主函数输出该职工的姓名。


输入


共有11行。
前10行中的每一行包含了一个职工的姓名和职工号。姓名是一个不包含空格且长度不超过20的字符串,职工号是一个不小于0且不大于1000的整数。
最后一行包含一个职工号,表示需要查找姓名的职工。保证需要查找的职工号一定出现在已经输入的10个职工信息中。


输出


共有11行。
前10行每一行输出按照职工号从小到大排序后的职工信息,包括姓名和职工号,用一个空格隔开。
最后一行输出查找到的职工姓名。
请注意行尾输出换行。


菜鸟的二分练习:


#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
struct node
{
char a[21];
int b;
}name[12];
int cmp(node n,node m)
{
return n.b<m.b;
}
int binary_search(int k)
{
int l=0,r=9;
int z=20;
while(r-l>=1)
{
int i=(l+r)/2;
if(name[i].b==k) return i;
else if(name[i].b<k) l=r/2+1;
else r=i;
}
return z;
}
int main()
{
int k;
for(int i=0;i<10;i++)
scanf("%s %d",&name[i].a,&name[i].b);
scanf("%d",&k);
sort(name,name+10,cmp);
int j=binary_search(k);
for(int i=0;i<10;i++)
printf("%s %d\n",name[i].a,name[i].b);
printf("%s\n",name[j].a);
return 0;
}




举报

相关推荐

0 条评论