顺序表应用6:有序顺序表查询
2017-01-17 17:32
218 查看
这个题要注意时间的限制,开始是直接遍历,结果时间超时,最后才想到用二分查找才AC的
顺序表内按照由小到大的次序存放着n个互不相同的整数(1<=n<=20000),任意输入一个整数,判断该整数在顺序表中是否存在。如果在顺序表中存在该整数,输出其在表中的序号;否则输出“No Found!"。
第一行输入整数n,表示顺序表的元素个数;
第二行依次输入n个各不相同的有序整数,代表表里的元素;
第三行输入整数t,代表要查询的次数;
第四行依次输入t个整数,代表每次要查询的数值。
输出t行,代表t次查询的结果,如果找到在本行输出该元素在表中的位置,否则本行输出No Found!
Problem Description
顺序表内按照由小到大的次序存放着n个互不相同的整数(1<=n<=20000),任意输入一个整数,判断该整数在顺序表中是否存在。如果在顺序表中存在该整数,输出其在表中的序号;否则输出“No Found!"。
Input
第一行输入整数n,表示顺序表的元素个数;第二行依次输入n个各不相同的有序整数,代表表里的元素;
第三行输入整数t,代表要查询的次数;
第四行依次输入t个整数,代表每次要查询的数值。
Output
输出t行,代表t次查询的结果,如果找到在本行输出该元素在表中的位置,否则本行输出No Found!
Example Input
10 1 22 33 55 63 70 74 79 80 87 4 55 10 2 87
Example Output
4 No Found! No Found! 10
#include<iostream> #include<stdio.h> #include<stdlib.h> #include<string.h> using namespace std; #define maxv 20005 typedef struct { int data[maxv]; int length; }SqList; int check(SqList *L,int temp) { int left,right,mid; left=0; right=L->length-1; while(left<=right) { mid=(left+right)/2; if(temp<L->data[mid]) right=mid-1; else if(temp>L->data[mid]) left=mid+1; else return mid; } return -1; } int main() { int t; int i; int n; int temp; SqList *L; scanf("%d",&t); L=(SqList *)malloc(sizeof(SqList)); for(i=0;i<t;i++) scanf("%d",&L->data[i]); L->length=t; scanf("%d",&n); for(i=0;i<n;i++) { scanf("%d",&temp); int k=check(L,temp); if(k==-1) printf("No Found!\n"); else printf("%d\n",k+1); } return 0; }
相关文章推荐
- 顺序表应用6:有序顺序表查询
- 顺序表应用6:有序顺序表查询
- 顺序表应用6:有序顺序表查询
- 3330顺序表应用6:有序顺序表查询
- 顺序表应用6:有序顺序表查询
- 顺序表应用6:有序顺序表查询
- 顺序表应用6:有序顺序表查询
- 顺序表应用6:有序顺序表查询
- 顺序表应用6:有序顺序表查询
- 顺序表应用6:有序顺序表查询
- 【3330】顺序表应用6:有序顺序表查询
- sdutacm-顺序表应用6:有序顺序表查询
- 顺序表应用6:有序顺序表查询
- 顺序表应用6:有序顺序表查询
- 顺序表应用6:有序顺序表查询
- SDUT 3330顺序表应用6:有序顺序表查询
- 顺序表应用6:有序顺序表查询
- SDUT 3330 顺序表应用6:有序顺序表查询
- 顺序表应用6:有序顺序表查询
- 顺序表应用6:有序顺序表查询