题目描述
编写函数找出正整数数组中的最大偶数和最小奇数,并求出这两个数的差值(最大偶数-最小奇数)。
函数接口定义:
int fun(int a[], int n, int* max, int* min);
其中a
是用户传入的数组,n
是数组a
中元素的个数(n>=2且保证偶数和奇数都至少存在一个),max
和min
是用户传入的指针。
裁判测试程序样例:
#include<stdio.h>
int fun(int a[], int n, int* max, int* min);
int main()
{
int n;
scanf("%d", &n);
int a[n], max=0, min=0, result=0;
for(int i=0;i<n;i++)
scanf("%d",&a[i]);
result = fun(a,n,&max,&min);
printf("max: %d, min: %d\nresult: %d", max, min, result);
return 0;
}
/* 请在这里填写答案 */
输入样例:
5
1 2 3 4 5
输出样例:
max: 4, min: 1
result: 3
参考答案
int fun(int a[], int n, int* max, int* min) { //参数是指针的作用是可以修改主函数里max和min的值
// 初始化最大偶数为负无穷小(因为偶数至少存在一个)
*max = -1;
// 初始化最小奇数为正无穷大(因为奇数至少存在一个)
*min = 1000000000;
// 遍历数组,找出最大偶数和最小奇数
for (int i = 0; i < n; i++)
{
if (a[i] % 2 == 0) // 如果是偶数
{
if (a[i] > *max)
*max = a[i];
}
else // 如果是奇数
if (a[i] < *min)
*min = a[i];
}
// 返回最大偶数与最小奇数的差值
return *max - *min;//max 和 min的值也被修改了
}