顺序表应用6:有序顺序表查询
2016-08-23 21:46
183 查看
顺序表应用6:有序顺序表查询
Time Limit: 7ms Memory limit: 700K 有疑问?点这里^_^
题目描述
顺序表内按照由小到大的次序存放着n个互不相同的整数(1<=n<=20000),任意输入一个整数,判断该整数在顺序表中是否存在。如果在顺序表中存在该整数,输出其在表中的序号;否则输出“No Found!"。
输入
第一行输入整数n,表示顺序表的元素个数;第二行依次输入n个各不相同的有序整数,代表表里的元素;
第三行输入整数t,代表要查询的次数;
第四行依次输入t个整数,代表每次要查询的数值。
输出
输出t行,代表t次查询的结果,如果找到在本行输出该元素在表中的位置,否则本行输出No Found!
示例输入
10 1 22 33 55 63 70 74 79 80 87 4 55 10 2 87
示例输出
4 No Found! No Found! 10
提示
来源
示例程序
二分查找,并且注意输入输出,不然超时
#include <iostream> #include <stdlib.h> #include <string.h> #include <stdio.h> using namespace std; int n, m; #define maxsize 10000010 typedef int element; typedef struct { element * elem; int length; int listsize; }sq; int Inlist(sq & l) { l.elem = (element * )malloc(maxsize * sizeof(element)); if(!l.elem) return -1; l.length = 0; l.listsize = maxsize; return 0; } void creat(sq & l) { for(int i = 0 ; i < n; i++) cin >> l.elem[i]; l.length = n; } void find(sq & l, int s, int t, int key) { int low = s, high = t; if(s <= t) { int mid = low + (high - low) / 2; if(l.elem[mid] == key) { cout << mid + 1 << endl; return; } if(l.elem[mid] > key) find(l, low, mid - 1, key); else find(l, mid + 1, high, key); } if(s > t) cout << "No Found!" << endl; } int main() { ios::sync_with_stdio(false); //加速输入输出,不然用scanf printf sq l; int t, x; cin >> n; Inlist(l); creat(l); cin >> t; while(t--) { cin >> x; find(l, 0, n - 1, x); } return 0; }
数组水——不能用cin和cout 会超时。。
#include <stdio.h> int a[20010]; void find(int a[], int s, int t, int key) { int low = s, high = t; if(s <= t) { int mid = low + (high - low) / 2; if(a[mid] == key) { printf("%d\n",mid + 1); return; } if(a[mid] > key) find(a, low, mid - 1, key); else find(a, mid + 1, high, key); } if(s > t) printf("No Found!\n"); } int main() { int n, t, x; scanf("%d",&n); for(int i = 0; i < n; i++) scanf("%d",&a[i]); scanf("%d",&t); while(t--) { scanf("%d",&x); find(a, 4000 0, n - 1, x); } return 0; }
相关文章推荐
- Codeforces Round #364 (Div. 2)->A. Cards
- 继承
- JSTL遍历数组
- hrbust 1759 Lawnmower【思维题】
- 使用jquery操作session
- 【Light-oj】-1043 - Triangle Partitioning(数学)
- maven
- 【LightOJ 1045 Digits of Factorial】
- day12总结
- Opencv Mat矩阵中data、size、depth、elemSize、step等属性的理解
- python 学习(十五)之 字典
- Spring AOP 实践(四)利用annotation实现声明式服务
- 暑假练习赛 007 A - Time
- MySQL 5.6.22 win32 zip版安装
- 不得不在脑海里徘徊的站外(第三方)SEO优化策略
- 字典树
- mysql中日期类型DATETIME和TIMESTAMP的区别
- Light-oj-1045 lightoj1045 - Digits of Factorial (N!不同进制的位数)
- URAL 2062 Ambitious Experiment(树状数组)
- Spring 事物机制总结