问题 K: Search Problem (IV)

xiaoxiao2022-06-03  10

主页 讨论版 问题 名次 状态 统计

问题 K: Search Problem (IV) 时间限制: 1 Sec 内存限制: 128 MB 提交: 6011 解决: 3487 [提交][状态][讨论版] 题目描述

查找(Search)也翻译成搜索,是计算机科学中的一个很大的子类,也是一种计算机的最常见应用。其核心是利用现代电子计算机的存储能力将数据收集起来,然后用某种查找(搜索)算法在有效的时间内,把需要的数据找出来。

查找(搜索)算法是利用计算机的高性能来有目的的穷举一个问题解空间的部分或所有的可能情况,从而求出问题的解的一种方法。查找(搜索)算法按照操作次序可以分成三大类:顺序查找(深度优先、广度优先)、二分查找、直接计算存储位置(如Hash表)。针对应用的性能要求和问题规模,选择不同的查找(搜索)算法。

在解决查找(搜索)的问题时,首先考虑数据组织与结构的问题,即在程序中用何种形式存储数据的。一般根据数据集中数据元素间的相互关系:一对一、一对多、多对多,分别组织成:有序表(也叫线性表)、树、图。这就是构造数据抽象的过程。

利用数据元素间存储位置的顺序关系来组织的结构一般称作数组(Array)、也做列表(list)或向量(Vector),所有的高级程序设计语言都会支持这种存储结构。计算机的内存储器就是按照这种方式来组织的,因此这也是计算机中最基本的存储结构。

数组是这样一种描述一对一关系的数据组织结构:任何一个数据元素都有一个固定的存储位置,每个位置前、后各仅有一个相邻的存储位置。数组中元素的存储位置之间满足一对一的线性序关系,因此可以用自然数来描述每个存储位置上的数据元素,这些自然数就是数组元素的唯一标识——下标。

数组的存储组织结构决定了一个事实:易于存取数据元素、难于改变存储结构。存取数组中数据元素的操作代价可以不计,修改数组中数据元素的代价非常大。因此,数组适用于一次性把数据存储好,不改变或者很少改变数据元素间相互关系的应用中,不适用于那些需要边使用数据边修改结构的问题。

利用数组解决数据查找(搜索)问题的基本步骤是:把数据存储到数组中,按合理的操作次序把想要的数据找出来。关键点是:合理利用下标和数据元素之间的对应关系,解决应该存储什么、以什么顺序存储的问题。


你要解决的问题是:在给定的一个整数序列中,按照要求解决一个查找(搜索)问题。

输入

输入分为两部分:第一部分是第一行,有N+1个整数,第一个正整数为N(N<=10000),表示后跟一个有N个元素的整数序列。

第二部分从第二行开始直到EOF结束,每行为一个整数i。

输出

输出为多行,与输入的第2部分顺序对应,每行输出为:

若i>0,从输入的整数序列中找到第i个整数并输出它的值,若i<0,从输入的整数序列中找到倒数第i个整数并输出它的值,若i不在整数序列的下标范围(1~N和-N~-1)内则输出“OUT OF RANGE”。

样例输入

10 1 2 3 2 3 4 3 3 5 0 1 -2 3 -5 10 100

样例输出

1 5 3 4 0 OUT OF RANGE

提示

Append Code

[提交][状态][讨论版]

한국어< 中文 فارسی English ไทย All Copyright Reserved 2010-2011 SDUSTOJ TEAM GPL2.0 2003-2011 HUSTOJ Project TEAM Anything about the Problems, Please Contact Admin:admin

#include<stdio.h> int main() { int n,m,i,j,b[100000],a; scanf("%d",&n); for(i=1;i<=n;i++) { scanf("%d “,&m); b[i]=m; } while(scanf(”%d",&a)!=EOF) { if(a>0) { if(a<=n) printf("%d\n",b[a]); else printf(“OUT OF RANGE\n”); } if(a<0) { if(a>=-n) printf("%d\n",b[n+1+a]); else printf(“OUT OF RANGE\n”); } }

}

转载请注明原文地址: https://www.6miu.com/read-4915050.html

最新回复(0)