C语言--查找整数和数列特征

查找整数

问题描述
给出一个包含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,再次提交,就得到满分了。
所以我猜想是因为数组定义得太小了,开辟的空间太小,导致数组越界。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值