zoukankan      html  css  js  c++  java
  • SDUT 3330 顺序表应用6:有序顺序表查询

     

     

    顺序表应用6:有序顺序表查询

    Time Limit: 1000 ms Memory Limit: 4096 KiB

    Problem Description

    顺序表内按照由小到大的次序存放着n个互不相同的整数,任意输入一个整数,判断该整数在顺序表中是否存在。如果在顺序表中存在该整数,输出其在表中的序号;否则输出“No Found!"。

    Input

     第一行输入整数n (1 <= n <= 100000),表示顺序表的元素个数;
    第二行依次输入n个各不相同的有序非负整数,代表表里的元素;
    第三行输入整数t (1 <= t <= 100000),代表要查询的次数;
    第四行依次输入t个非负整数,代表每次要查询的数值。

    保证所有输入的数都在 int 范围内。

    Output

     输出t行,代表t次查询的结果,如果找到在本行输出该元素在表中的位置,否则本行输出No Found!

    Sample Input

    10
    1 22 33 55 63 70 74 79 80 87
    4
    55 10 2 87

    Sample Output

    4
    No Found!
    No Found!
    10

    提示:本题可以通过二分查找来完成,也是应用了顺序表和数组类似的原理。

    代码实现如下(gcc):
    #include<stdio.h>
    #include<stdlib.h>
    int a[100010];
    int setlist(int l,int r,int k)
    {
        int i=l,j=r,mid;
        if(i<=j)
        {
            mid=(l+r)/2;
            if(a[mid]==k)
                return mid;
            else if(a[mid]>k)
                setlist(l,mid-1,k);
            else if(a[mid]<k)
                setlist(mid+1,r,k);
        }
        else
        return -1;
    }
    
    int main()
    {
      int n,m,t,key;
      int i,j;
      scanf("%d",&n);
      for(i=0;i<n;i++)
      scanf("%d",&a[i]);
      scanf("%d",&m);
      for(i=0;i<m;i++)
      {
          scanf("%d",&key);
          t=setlist(0,n,key);
          if(t==-1)
            printf("No Found!
    ");
          else
            printf("%d
    ",t+1);
      }
      return 0;
    }
    
    
    /***************************************************
    Result: Accepted
    Take time: 80ms
    Take Memory: 492KB
    ****************************************************/
  • 相关阅读:
    Object C学习笔记25-文件管理(一)
    实施项目--为什么开发人员一直在抱怨需求变动
    Git.Framework 框架随手记--准备工作
    一网打尽!2018网络安全事件最全的盘点
    林纳斯·托瓦兹和Linux行为准则:揭穿7个谬论
    LinkedList源码解析
    四种List实现类的对比总结
    HashMap源码解析
    volatile
    Java内存模型与共享变量可见性
  • 原文地址:https://www.cnblogs.com/jkxsz2333/p/9487409.html
Copyright © 2011-2022 走看看