美文网首页
查找——二分查找

查找——二分查找

作者: 辘轳鹿鹿 | 来源:发表于2020-06-24 15:14 被阅读0次

    清华大学复试查找学生信息问题

    重要的话写在最前面:这段代码可以通过示例,但是不能AC。点击对比用例标准输出与你的输出,显示“没有输入输出数据”。求大佬解惑!Orz

    题目描述

    输入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!”

    示例1

    输入

    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

    #include<stdio.h>
    #include<stdlib.h>
    struct student{
        char num[20];
        char name[20];
        char sex[10];
        int age;
    }stu[1001];
    int main(){
        int n;
        while(scanf("%d",&n)!=EOF){
            int i,m,start,end,mid;
            char id[20];
            for(i=0;i<n;i++){
                scanf("%s %s %s %d",stu[i].num,stu[i].name,stu[i].sex,&stu[i].age);
            }
            scanf("%d",&m);
            for(i=0;i<m;i++){
                scanf("%s",id);
                start=0;
                end=n-1;
    
                while(start<=end){
                    mid=(start+end)/2;
                    if(strcmp(id,stu[mid].num)==0){
                        printf("%s %s %s %d\n",stu[mid].num,stu[mid].name,stu[mid].sex,stu[mid].age);
                        break;
                    }
                    else if(strcmp(id,stu[mid].num)<0)
                    {
                        end=mid-1;
                    }
                    else{
                        start=mid+1;
                    }
                }
                if(start>end){
                    printf("No Answer!\n");
                }
            }
        }
    }
    
    

    相关文章

      网友评论

          本文标题:查找——二分查找

          本文链接:https://www.haomeiwen.com/subject/nwvrfktx.html