第十四届蓝桥杯集训——练习解题阶段(无序阶段)-基础练习 查找整数
前言
最近的一些文章都可能会很碎,写到哪里是哪里,过一阵子会具体的整理一遍,这里其它的类型题先往后排一排,因为蓝桥最后考的也就是对题目逻辑的理解能力,也就是dp分析能力了,所以就主要目标定在这里,最近的题目会很散,很多,基本上都是网罗全网的一些dp练习题进行二次训练,准备比赛的学生底子薄的先不建议看啊,当然,脑子快的例外,可以直接跳过之前的一切直接来看即可,只需要你在高中的时候数学成绩还可以那就没啥问题,其实,dp就是规律总结,我们只需要推导出对应题目的数学规律就可以直接操作,可能是一维数组,也可能是二维数组,总体来看二维数组的较多,但是如果能降为的话建议降为,因为如果降为起来你看看时间复杂度就知道咋回事了,那么在这里祝大家能无序的各种看明白,争取能帮助到大家。
基础练习 查找整数
资源限制
内存限制:256.0MB C/C++时间限制:1.0s Java时间限制:3.0s Python时间限制:5.0s
问题描述
给出一个包含n个整数的数列,问整数a在数列中的第一次出现是第几个。
输入格式
第一行包含一个整数n。
第二行包含n个非负整数,为给定的数列,数列中的每个数都不大于10000。
第三行包含一个整数a,为待查找的数。
输出格式
如果a在数列中出现了,输出它第一次出现的位置(位置从1开始编号),否则输出-1。
样例输入
6
1 9 4 8 3 9
9
样例输出
2
数据规模与约定
1 <= n <= 1000。
题解:这个题目说白了就是根据输入顺序进行遍历,我们只需要确定罗列的方式即可,如果放在数组里面遍历后直接看下角标,然后下角标+1输出即可,如果是字符串的话直接使用indexOf看看第一次出现的坐标就OK,当然这里也需要+1才能是正确的答案。
C语言
纯暴力处理就完事,C语言最快。
#include <stdio.h> #define MAXN 10001 int n, a, ans; int s[MAXN]; int main() { int i; scanf("%d", &n); for (i = 0; i < n; ++i) scanf("%d", &s[i]); scanf("%d", &a); ans = -1; for (i = 0; i < n; ++i) { if (s[i] == a) { ans = i + 1; break; } } printf("%d", ans); return 0; }
C++语言
其实这个输入方式还是比较麻烦的,但是查找起来直接就遍历后+1返回速度是很快的。
#include <iostream> using namespace std; const int MAXN = 10001; int n, a, ans; int s[MAXN]; int main() { cin >> n; for (int i = 0; i < n; ++i) cin >> s[i]; cin >> a; ans = -1; for (int i = 0; i < n; ++i) { if (s[i] == a) { ans = i + 1; break; } } cout << ans << endl; return 0; }
Java语言
nextLine还是很好用的呢。
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc=new Scanner(System.in); int n=sc.nextInt(); sc.nextLine(); int[] num=new int[n]; for(int i=0;i<n;i++){ num[i]=sc.nextInt(); } sc.nextLine(); int x=sc.nextInt(); int result=-1; for(int i=0;i<n;i++){ if(num[i]==x){ result=i+1; break; } } System.out.println(result); } }
Python语言
无论怎么算还是需要遍历看看的,最终+1完成结果输出。
x = eval(input()) a = [] n = input().split(" ") for i in range(0,x): a.append(int(n[i])) y = eval(input()) try: z = a.index(y) except: z = -2 print(z+1)
总结
这类小题一般蓝桥杯都会放1~2个的,这类题不能说是送分,很多孩子由于没有刷题所以解起来还是有一定难度的,但是对于努力刷题的孩子们来说就是很简单的了。
没有什么不付出就能拿到的结果,我们都是在负重前行,最终结果与自身先天的脑力有一定的关系,但是还是有很大一部分看自己后天的努力,其实从报名到比赛也就5个月左右,真正刷题的事件也就2个月,2个月回忆一下你真正的认真刷过题吗,如果你真的用尽所有的精力去努力了,那么我相信你最终的成绩一定会让你满意的,加油。