练习7-2 求最大值及其下标

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/melody_1016/article/details/83184570

练习7-2 求最大值及其下标 (20 分)

本题要求编写程序,找出给定的n个数中的最大值及其对应的最小下标(下标从0开始)。

输入格式:

输入在第一行中给出一个正整数n(1<n≤10)。第二行输入n个整数,用空格分开。

输出格式:

在一行中输出最大值及最大值的最小下标,中间用一个空格分开。

输入样例:

6
2 8 10 1 9 10

输出样例:

10 2

思路一:先遍历一边数组找出最大值max;然后以max作为另一个函数的参数,再遍历一边数组,将max与每一个数字进行比较,找出最小下标。

代码:

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
//思路一:(1)将数字存入数组中,先遍历数组找出最大值max;
//(2)将最大值max作为参数,在另一个函数中再遍历数组,将每一个值与max比较,找出最小下标
int FindMaxNum(int a[], int n)
{
	int max = a[0];
	for (int i = 1; i < n; i++)
	{
		if (a[i]>max)
		{
			max = a[i];
		}
	}
	return max;
}

//找最大值的最小下标
int FindIndex(int a[], int n, int max)
{
	int index = 0;
	for (int i = 0; i < n; i++)
	{
		if (a[i] == max)
		{
			index = i;
			break;
		}
	}
	return index;
}
int main()
{
	int arr[10] = { 0 };
	int n = 0;
	scanf("%d", &n);
	for (int i = 0; i < n; i++)
	{
		scanf("%d", &arr[i]);
	}
	int _max = FindMaxNum(arr, n);
	int _index = FindIndex(arr, n, _max);
	printf("%d %d\n", _max, _index);
	system("pause");
	return 0;
}

测试结果:

 缺点:遍历了2遍数组,时间复杂度较高。

优化方案:index保存最大值所在的最小下标,arr[index]即为最大值;遍历一遍数组,边遍历边比较数值大小,不断更新index,最后index就是最大值的最小下标,arr[index]为最大值。这样时间复杂度就降为O(n)

代码:

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
//思路二:O(n)时间复杂度
//index保存最大值所在的最小下标,arr[index]即为最大值;
//遍历一遍数组,边遍历边比较数值大小,不断更新index,最后index就是最大值的最小下标,arr[index]为最大值
int Find_Maxnum_index(int a[], int n)
{
	int index = 0;
	for (int i = 1; i < n; i++)
	{
		if (a[i]>a[index])
		{
			index = i;
		}
	}
	return index;
}
int main()
{
	int arr[10] = { 0 };
	int n = 0;
	scanf("%d", &n);
	for (int i = 0; i < n; i++)
	{
		scanf("%d", &arr[i]);
	}
	
	int _index = Find_Maxnum_index(arr, n);
	printf("%d %d\n", arr[_index], _index);
	system("pause");
	return 0;
}

测试结果:

猜你喜欢

转载自blog.csdn.net/melody_1016/article/details/83184570