/*
问题:输入N个学生的信息,进行查询
输入:
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
N;学生个数,<=1000,
M,查询M次,M<=10000时间复杂度:
普通搜索:O(n*m) = O(1000*10000)=O(10000000),千万数量级
二分搜索:以学号为搜索主题,O(log2N*M)(搜索) + O(log2N*N)(排序) =O(10*10000) + O(10*1000)=O(100000),十万级关键:
1 二分查找的查询条件 是 while(low <= high),=号不能丢掉,因为有时候low = high时,才找到目标值
2 使用二分查找的前提条件是,有序排列,为此可以使用快速排序进行排序(你没有做)
3 性别虽然是一个汉字,但是至少需要2个字节,因此存储类型必须用字符指针
*/#include <stdio.h>
#include <stdlib.h>typedef struct StuInfo
{bool operator < (StuInfo& stuInfo){return _iStuNo < stuInfo._iStuNo;}int _iStuNo;char _sName[32];char _sSex[6];//关键性别如果是汉字,至少2个字节,但是char只有1个字节int _iAge;
}StuInfo;template<typename T>
int partition(T* A,int low ,int high)
{T iPos = A[low];while(low < high){while(low < high && iPos < A[high]){high--;}A[low] = A[high];while(low < high && A[low] < iPos){low++;}A[high] = A[low];}A[low] = iPos;return low;
}template<typename T>
void quickSort(T *A,int low,int high)
{if(low < high){int iPos = partition(A,low,high);quickSort(A,low,iPos - 1);quickSort(A,iPos + 1,high);}
}//int binarySearch(int *Array,int iLow,int iHigh,int iSeaValue)
int binarySearch(int *Array,int iLow,int iHigh,int iSeaValue)
{int iMid;while(iLow <= iHigh)//易错,这边要加等号,否则low=high不循环了{iMid = (iLow + iHigh)/2;if(iSeaValue < Array[iMid]){iHigh = iMid - 1;}else if(iSeaValue > Array[iMid]){iLow = iMid + 1;}else{return iMid;}}//程序走到这里,表示没有找到return -1;
}int main(int argc,char* argv[])
{int N;//while(EOF!=scanf("%d %s %c %d",&stuInfo.iStuNo,stuInfo.sName,stuInfo.cSex,stuInfo.iAge))while(EOF!=scanf("%d",&N) && N <= 1000){StuInfo stuInfo[100];int iGivStuNo[100],i;//输入N个学生的信息for(i = 0; i < N ;i++){scanf("%d %s %s %d",&stuInfo[i]._iStuNo,stuInfo[i]._sName,stuInfo[i]._sSex,&stuInfo[i]._iAge);//字符串不需要取地址符,字符需要取地址符,又是取地址符没加//iGivStuNo[i] = stuInfo[i]._iStuNo;//printf("\n");}//对输入的学生信息按照学号进行快速排序quickSort<StuInfo>(stuInfo,0,N-1);//将已经排好序的学号存入数组for(i = 0; i < N ;i++){iGivStuNo[i] = stuInfo[i]._iStuNo;}int M;scanf("%d",&M);if(M > 10000){break;}else{int iStuNoArr[100];int iStuNo,j;for(j = 0;j < M;j++){scanf("%d",&iStuNo);iStuNoArr[j] = iStuNo; }//下面用二分法进行查找for(j = 0; j < M ; j++){int iRes = binarySearch(iGivStuNo,0,N-1,iStuNoArr[j]);if(iRes==-1){printf("%s","No Answer!");}else{printf("%d %s %s %d\n",stuInfo[iRes]._iStuNo,stuInfo[iRes]._sName,stuInfo[iRes]._sSex,stuInfo[iRes]._iAge);}}}}system("pause");getchar();return 0;
}

机试算法讲解: 第10题 让我们来查询学生的信息相关推荐

  1. 机试算法讲解:第26题 分解素因数

    /* 问题:质因数个数.求正整数N(>1)的质因数的个数.相同的质因数需要重复计算.如120=2*2*2*3*5,共有5个质因数. 输入:多组测试数据,每组测试数据的输入时一个正整数N,(1&l ...

  2. 机试算法讲解: 第11题 贪心之猫鼠大战

    /* 贪心算法 问题:M磅猫粮,N个房间,第i个房间放着J[i]的老鼠粮食,需要F[i]磅猫粮给猫来看守,如果给予猫粮:F[i]*a%,则可获得J[i]*a%的老鼠粮食 输入: 第一行:非负整数 M ...

  3. Java算法:华为机试算法(下),华为算法Java版,牛客网华为算法73~108题

    接上篇:Java算法:华为机试算法(中),华为算法Java版,牛客网华为算法55~72题   HJ73 计算日期到天数转换 计算日期到天数转换 题目描述 根据输入的日期,计算是这一年的第几天.. 测试 ...

  4. 华为OD机试(21-40)老题库解析Java源码系列连载ing

    华为OD机试算法题新老题库练习及源码 老题库 21.字符串序列判定 22.最长的指定瑕疵度的元音子串 23.处理器问题 24.单向链表中间节点 25.字符串重新排列.字符串重新排序 26.完美走位 2 ...

  5. 2023华为OD机试备考攻略 以及题库目录分值说明 考点说明

    刷题库,刷题库 刷题库.重要的事情说三遍!!!!!!!!!!!!!!!!!!!!!! 要刷有多种语言的实现的题库,一种语言看不懂可以换另一种语言,而且可以结合起来去重!!! 类似下面这种的题库: 华为 ...

  6. 华为OD机试(Java)真题目录汇总(20222023)

    1.其它语言华为OD机试真题目录 华为OD机试(Python)真题目录汇总 华为OD机试(C++)真题目录汇总 华为OD机试(JavaScript)真题目录汇总 2.Java语言实现华为OD机试目录 ...

  7. 华为OD机试(Python)真题目录汇总(20222023)

    1.其它语言华为OD机试真题目录 华为OD机试(JAVA)真题目录汇总 华为OD机试(C++)真题目录汇总 华为OD机试(JavaScript)真题目录汇总 2.Python语言实现华为OD机试目录 ...

  8. 关于华为机试会不会考原题Od的问题?

    实证一下华为机试可能会考到原题吧. 都是扒的2022年下半年的牛客上的面经记录,里面有机试题的分享. 牛客网讨论区2022下半年的帖子,基本上是实锤的. 注意:牛客网上的是练习题,和考试真题是不一样的 ...

  9. 某厂机试算法刷题一览

    牛客网-华为笔试面试机考在线练习 力扣刷题 All posts in 德科机试一星题 A机试叮当猫-华为机试真题 GavenHwang的博客-华为机试 coder 明轩博客-华为机试23题总结 目录 ...

最新文章

  1. 【Sql Server】Database-sql语言的流程控制语句
  2. Tomcat-上传文件路径填坑
  3. matlab画二维网格贴吧,Matlab二维网格划分—预告
  4. Codeforces 963A Alternating Sum 【数论+数学】
  5. expect to check grammarly intime
  6. (010) Linux之I/O重定向
  7. 8 个 Python 实用脚本,赶紧收藏备用!
  8. 解决后端返回数据中的大数字问题(使用第三方包json-bigint )
  9. vue 每次弹框都初始化
  10. 为什么表格后面打不出0_同样的LOL游戏,为什么BO5和BO3的结局差距如此之大?...
  11. halcon——在图形窗口中画坐标系
  12. 最短路问题——spfa算法
  13. orbslam2 流程图_一种基于ORBSLAM2的八叉树建图方法与流程
  14. 关于MATLAB powergui 无法调整为discrete的解决方法
  15. [附源码]java+ssm计算机毕业设计海洋之心项链专卖网ffv1b(源码+程序+数据库+部署)
  16. BlueTeam 应急
  17. Paper写作查重需要注意哪些问题?
  18. MySQL 精选问答 500 题
  19. PhotoShop常用的快捷键及 瘦身
  20. python 如何换行

热门文章

  1. 简洁开源导航主题—酷啦鱼主题1.0.0版+WP内核
  2. houdini 曲线力场
  3. qq2007与win2003server sp2不兼容,死机的解决
  4. 《易经》中的64个人生智慧
  5. 中学 教育知识与能力 思维导图
  6. 公交车查询系统(20070719更新)
  7. 尚医通 (二)项目搭建
  8. 知识计算机硬件 教学设计,计算机硬件系统教学设计.doc
  9. 路由器多久重启一次比较好?
  10. JavaScript实现简单计算器及输出三角形(初学者适用)