问题 H: 编写函数:求数组中的最大值 (Append Code)

题目描述

现有一个不超过N个元素的数组,其中可能有重复数据出现。求该数组中的最大值以及最大值所在的下标。


结合“Append Code”中的代码,编写以下函数:

原型:int get_array(int a[]);

功能:遵循样例输入的格式读取若干整数存放在a[]里,返回值为实际输入的元素个数。

原型:int put_array(int a[], int n);

功能:按格式输出a[]中的前n个元素。

原型:int max_value(int a[], int n);

功能:返回a[]中所有元素的最大值。

原型:int max_index(int idx[], int a[], int n);

功能:将a[]中所有最大值所在位置的索引(下标)存放在idx中,返回idx[]中元素的个数。

函数的调用格式见“Append Code”。

输入

第一个输入为正整数N<=1000,后面输入N个整数。

输出

输出是一行,其格式为:

maximum number is ?, whose positions are:*

其中“?”代表最大值(唯一的),“*”代表最大值所在的位置。如果最大值出现多次,则需输出所有的下标,下标两两之间由半角的逗号“,”隔开。

样例输入

9
1 2 3 9 5 8 7 8 9

样例输出

maximum number is 9, whose positions are:3,8

代码如下:

#include<stdio.h>
#define MAX_SIZE 1005
int get_array(int a[])
{
    int n;
    scanf("%d",&n); 
    for(int i=0;i<n;i++){
        scanf("%d",&a[i]);
    }
    return n;
}
int put_array(int a[], int n)
{
    for(int j=0;j<n;j++){
        if(j==0){
            printf("%d",a[j]);
        }
        else{
            printf(",%d",a[j]);
        } 
    }
    printf("\n");
    return 0; 
}
int max_value(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 max_index(int idx[], int a[], int n)
{
	int count = 0;
    int max = max_value(a, n);
    for(int i=0;i<n;i++){
    	if(a[i]==max){
    		idx[count++] = i;
		}
	}
    return count;
}

int main()
{
    int array[MAX_SIZE], size;
    int index[MAX_SIZE], idx_size;

    size = get_array(array);
    idx_size = max_index(index, array, size);
    printf("maximum number is %d, ", max_value(array, size));
    printf("whose positions are:");
    put_array(index, idx_size);

    return 0;
}
发布了99 篇原创文章 · 获赞 63 · 访问量 6209

猜你喜欢

转载自blog.csdn.net/m0_43456002/article/details/103114125