问题描述
给出n个数,找出这n个数的最大值,最小值,和。
输入格式
第一行为整数n,表示数的个数。
第二行有n个数,为给定的n个数,每个数的绝对值都小于10000。
输出格式
输出三行,每行一个整数。第一行表示这些数中的最大值,第二行表示这些数中的最小值,第三行表示这些数的和。
样例输入
5
1 3 -2 4 5
样例输出
5
-2
11
数据规模与约定
1 <= n <= 10000。
说明:运用了函数的调用、数组作为函数参数
注意:调用函数时,函数的数组参数用数组名(地址)。在蓝桥杯的编译环境中可以对数组的大小动态定义,如下:
int n;
cin>>n;
int m[n];
#include<stdio.h>
int main()
{
int max(int n,int m[]); //函数的声明
int min(int n,int m[]);
int sum(int n,int m[]);
int n,i,m[10000]={0};
scanf("%d",&n);
for(i=0;i<n;i++) //数组赋值
scanf("%d",&m[i]);
printf("%d\n",max(n,m)); //函数中是数组名
printf("%d\n",min(n,m));
printf("%d\n",sum(n,m));
return 0;
}
int max(int n,int m[10000]) //求最大值函数
{
int x=m[0],i;
for(i=0;i<n;i++)
x=(x<m[i])?m[i]:x;
return x;
}
int min(int n,int m[10000]) //求最小值函数
{
int x=m[0],i;
for(i=0;i<n;i++)
x=(x>m[i])?m[i]:x;
return x;
}
int sum(int n,int m[10000]) //求和函数
{
int x=0,i;
for(i=0;i<n;i++)
x=x+m[i];
return x;
}
说明:将上代码简化
#include<stdio.h>
int main()
{
int n,i,m[10000]={0},max,min,sum=0;
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%d",&m[i]);
max=m[0];
min=m[0];
for(i=0;i<n;i++)
{
max=(max<m[i])?m[i]:max;
min=(min>m[i])?m[i]:min;
sum=sum+m[i];
}
printf("%d\n",max);
printf("%d\n",min);
printf("%d\n",sum);
return 0;
}
说明:将max,min分别赋值为最大和最小,从而只用一个循环,代码长度最小
#include<stdio.h>
int main()
{
int n,i,m[10000]={0},max=0x80000001,min=0x7fffffff,sum=0;
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%d",&m[i]);
max=(max<m[i])?m[i]:max;
min=(min>m[i])?m[i]:min;
sum=sum+m[i];
}
printf("%d\n",max);
printf("%d\n",min);
printf("%d\n",sum);
return 0;
}