查找整数【蓝桥杯基础练习】

  • 内容
  • 相关

问题描述

    给出一个包含n个整数的数列,问整数a在数列中的第一次出现是第几个。

输入格式
    第一行包含一个整数n
    第二行包含n个非负整数,为给定的数列,数列中的每个数都不大于10000

    第三行包含一个整数a,为待查找的数。

输出格式

    如果a在数列中出现了,输出它第一次出现的位置(位置从1开始编号),否则输出-1

样例输入

6
1 9 4 8 3 9

9

样例输出

2

数据规模与约定

1 <= n <= 1000

分析:

    这道题我采用的是带哨兵的顺序查找,这样就免去了在查找过程中每一次比较后都要判断查找位置是否越界,如果数据比较多时,会提高效率。因为题目中要找第一次出现的位置,所以我将“哨兵”设置为末端,这时候代码是从首部开始查找,由于 a[n]=key,也就是说如果在 a[i] 中有 key 则返回 值,查找成功。否则移动在最终的 a[n] 处等于 key ,此时返回的是 n 即说明在 a[0]~a[n-1] 中没有关键字 key ,查找失败。

源代码

#include <iostream>
using namespace std;
int Seq_search(int *a, int n, int key); 
int main()
{
	int n, i, key;
	int a[1000];
	scanf("%d",&n);
	for(i=0; i<n; i++)
		scanf("%d",&a[i]);
	scanf("%d", &key);	//待查找的数
	int ret = Seq_search(a,n,key);
	if(ret == n)
		printf("-1\n");
	else
		printf("%d\n",ret+1);
	return 0;
} 
int Seq_search(int *a, int n, int key)
{
	int i = 0;
	a[n] = key;
	while(a[i]!=key)
	{
		i++;
	}
	return i;	//返回n说明查找失败 
}

。。

本文标签:

版权声明:若无特殊注明,本文皆为《尤尤》原创,转载请保留文章出处。

本文链接:查找整数【蓝桥杯基础练习】 - https://www.yxfseo.cn/post-184.html

发表评论

电子邮件地址不会被公开。 必填项已用*标注