qq_54509887 2021-11-19 19:57 采纳率: 62.5%
浏览 110
已结题

数据结构--折半查找(oj题)

题目

Input

输入的第一行包含2个正整数n和k,分别表示共有n个整数和k次查询。其中n不超过1000,k同样不超过1000。
第二行包含n个用空格隔开的正整数,表示n个有序的整数。输入保证这n个整数是从小到大递增的。
第三行包含k个用空格隔开的正整数,表示k次查询的目标。

Output

只有1行,包含k个整数,分别表示每一次的查询结果。如果在查询中找到了对应的整数,则输出其相应的位置,否则输出-1。
请在每个整数后输出一个空格,并请注意行尾输出换行。

Sample Input Copy

8 3
1 3 5 7 8 9 10 15
9 2 5

Sample Output Copy

5 -1 2

出现问题:提交oj上总是显示 Compile Error 0
怎么解决?

我写的代码

#include<stdio.h>
#include<malloc.h>

//顺序存储结构
typedef struct{
    int key;
}ElemType;

typedef struct{
    ElemType *elem; //0 不存元素 
    int length;
}SSTable;

//创建顺序静态表
void CreateSST(SSTable &ST,int n){
    int i;
    ST.elem =(ElemType*)malloc(sizeof(ElemType)*(n+1));
    ST.length=n;
    for(i=1;i<=n;i++){
        scanf("%d",&ST.elem [i].key);
    
        getchar();
    } 
}  

//折半查找
int Search_Bin(SSTable &ST,int key){
    int low,mid,high;
    low=1;
    high=ST.length ;
    while(low<=high){
        mid=(low+high)/2;
        if(key==ST.elem [mid].key) return mid;
        else if(key>ST.elem [mid].key) low=mid+1;
        else if(key<ST.elem [mid].key) high=mid-1;
        else return -1;
    }
    return 0;
} 

int main(){
    int j,n,k;
    while(scanf("%d%d",&n,&k)!=EOF&&n<=1000&&k<=1000){
    SSTable ST,DT;
    CreateSST(ST,n);
    CreateSST(DT,k);
    for(j=1;j<=k;j++){
        int t=Search_Bin(ST,DT.elem [j].key);
        printf("%d ",t-1);
     
    }
    printf("\n");

    }
    return 0;
}


  • 写回答

1条回答 默认 最新

  • 从善若水 5G/6G通信领域优质创作者 2021-11-19 20:24
    关注

    这个问题没必要这么复杂吧,你定义那些结构体干什么,直接动态分配一个int数组不可以吗

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 11月28日
  • 已采纳回答 11月20日
  • 创建了问题 11月19日

悬赏问题

  • ¥100 为什么这个恒流源电路不能恒流?
  • ¥15 有偿求跨组件数据流路径图
  • ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值
  • ¥15 我想咨询一下路面纹理三维点云数据处理的一些问题,上传的坐标文件里是怎么对无序点进行编号的,以及xy坐标在处理的时候是进行整体模型分片处理的吗
  • ¥15 CSAPPattacklab
  • ¥15 一直显示正在等待HID—ISP
  • ¥15 Python turtle 画图
  • ¥15 stm32开发clion时遇到的编译问题
  • ¥15 lna设计 源简并电感型共源放大器
  • ¥15 如何用Labview在myRIO上做LCD显示?(语言-开发语言)