查找整数
问题描述
给出一个包含n个整数的数列,问整数a在数列中的第一次出现是第几个。
输入格式
第一行包含一个整数n。
第二行包含n个非负整数,为给定的数列,数列中的每个数都不大于10000。
第三行包含一个整数a,为待查找的数。
输出格式
如果a在数列中出现了,输出它第一次出现的位置(位置从1开始编号),否则输出-1。
样例输入
6
1 9 4 8 3 9
9
样例输出
2
数据规模与约定
1 <= n <= 1000。
解决思路
本题思路集中在两个for循环,第一个for循环用于输出一组我们要用于查找的存放于数组中的数字。第二个for循环用于查找数组中有无我们要找的那个数字,有则输出对应数组下标(及位置),无则输出-1。
C代码如下:
#include<stdio.h>
#define max 100
int main()
{
int n, k, i = 0;
int a[max];
int flag = -1;
scanf("%d",&n);
for (i = 1; i <= n; i++)
{
scanf("%d",&a[i]);
}
scanf("%d", &k);
for (i = 1; i <= n; i++)
{
if (a[i] == k)
{
printf("%d", i);
flag = 1;
break;
}
}
if (flag == -1)
printf("%d\n", flag);
return 0;
}
这个题比较容易,就不做过多分析了。
数列特征
问题描述
给出n个数,找出这n个数的最大值,最小值,和。
输入格式
第一行为整数n,表示数的个数。
第二行有n个数,为给定的n个数,每个数的绝对值都小于10000。
输出格式
输出三行,每行一个整数。第一行表示这些数中的最大值,第二行表示这些数中的最小值,第三行表示这些数的和。
样例输入
5
1 3 -2 4 5
样例输出
5
-2
11
数据规模与约定
1 <= n <= 10000。
解题思路
与上一题类似,先使用一个for循环将所有数读入到一个数组中,再使用一个for循环依次枚举数组中的每个元素,使用三个变量分别表示当前找到的最大值、最小值及前一部分数的和。最后输出。
C代码如下:
#include<stdio.h>
#include<stdlib.h>
#define N 10000
int main()
{
int n, i = 0;
int a[N];
int max=0;
int min=0;
int sum=0;
scanf("%d", &n);
for (i = 0; i < n; i++)
{
scanf("%d", &a[i]);
}
max = min = a[0];
for (i = 0; i < n; i++)
{
if (a[i] > max)
max = a[i];
if (a[i] < min)
min = a[i];
sum = sum + a[i];
}
printf("%d\n", max);
printf("%d\n", min);
printf("%d\n", sum);
return 0;
}
遇到的问题
其实我第一次编译出来结果的源代码与上述代码并不一样,区别在于我第一次将N定义为100,而上述是10000。这个是蓝桥杯的基础练习题,当我将第一次的代码往题库里提交时,却得不到满分。后来我尝试将N定义改为10000,再次提交,就得到满分了。
所以我猜想是因为数组定义得太小了,开辟的空间太小,导致数组越界。