1367 - 算法9-1:静态表的顺序查找

通过次数

0

提交次数

0

时间限制 : 1 秒 内存限制 : 32 MB
用顺序表或者线性链表表示静态查找表时,搜索函数可以采用顺序查找来实现。
通常顺序查找的查找过程是从表中的自后一个记录开始,逐个将记录的关键字和给定的查找值进行比较,如果某个记录的关键字与给定的值比较相等,则说明查找成功;否则如果直到第一个记录,所有的关键字都与给定的值不相等,说明表中没有响应的记录,查找失败。
其查找过程可以描述如下:

<span style="font-family:宋体;">在本题中,读入一串整数,另外给定多次查询,判断每一次查询是否找到了相应的整数,如果找到则输出整数相应的位置。</span>

<span></span>

题目输入

输入的第一行包含2个正整数n和k,分别表示共有n个整数和k次查询。其中n不超过500,k同样不超过500。
第二行包含n个用空格隔开的正整数,表示n个原始记录。
第三行包含k个用空格隔开的正整数,表示k次查询的目标。

题目输出

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

输入/输出样例

输入格式

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

输出格式

5 -1 2 

C语言解答

#include <stdio.h>
int main(){
	int n,tmp,i,m,a[500];
//	freopen("1.txt","r",stdin);
	while (scanf("%d %d",&n,&m)!=EOF)
	{
		for (i=0;i<n;i++)
		{
			scanf("%d",&a[i]);
		}
		while (m--)
		{
			scanf("%d",&tmp);
			for (i=n-1;i>=0;i--)
			{
				if (tmp==a[i])
				{
					printf("%d ",i);
					break;
				}
			}
			if (i==-1)
			{
				printf("-1 ");
			}
		}
		printf("\n");
	}
//	fclose(stdin);
	return 0;
}

C++解答

#include <cstdio>
#include <cstdlib>
#include <stack>
#include <algorithm>
using namespace std;
const int MAXN = 500;
int val[MAXN + 1];
int main() {
	int n, k, position, query;
	scanf("%d%d", &n, &k);
	for (int i = 0;i < n;i++) {
		scanf("%d", &val[i + 1]);
	}
	for (int i = 0;i < k;i++) {
		scanf("%d", &query);
		val[0] = query;
		position = n;
		while (val[position] != query) position--;
		printf("%d ", position - 1);
	}
	puts("");
	return 0;
}