#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int seek_Max(int* p, int n) {
int i, min;
min = *p;
int ret = *(p+ 1) - *p;
for (i = 1; i < n; i++) {
if (*(p + i) - min > ret) {
ret = *(p + i) - min;
}
if (*(p + i) < min) {
min = *(p + i);
}
}
return ret;
}
int main() {
int n, i, rt;
scanf("%d", &n);
int* p = (int*)malloc(sizeof(int) * n);
if (!p) {
return 0;
}
for (i = 0; i < n; i++) {
scanf("%d", p + i);
}
rt = seek_Max(p, n);
printf("%d", rt);
free(p);
p = NULL;
return 0;
}
自己测试了很多次,答案都符合要求,但是不能通过刷题网站的检测,一直反馈答案错误
分别找出最大最小值就差不就行了么
int seek_Max(int* p, int n) {
int i, min,max;
min = max = p[0];
for (i = 1; i < n; i++) {
if(p[i] > max)
max = p[i];
if(p[i] < min)
min = p[i];
}
return max - min;
}
你的代码的问题在于:
min的值在for循环中一直不停的更新,那么就导致 if (*(p + i) - min > ret) 这个if语句中 得到的ret并不是真正的最小值,if语句中的min只是当前的最小值,而不是整个数组的最小值。
所以,需要先找出数组中的最大值和最小值,然后用最大值-最小值,得到的就是最大差值。
参考如下:
int seek_Max(int* p, int n)
{
int i,min,max;
for (i=0;i<n;i++)
{
if(i==0)
{
max = p[0];
min = p[0];
}else
{
if(p[i]>max) max = p[i];
if(p[i]<min) min = p[i];
}
}
return (max-min);
}