题目:
在数组中,每个数字减去它右边的所有数字得到一个数对之差。求所有数对之差的最大值。
例如在数组{2, 4, 1, 16, 7, 5, 11, 9}中,数对之差的最大值是9,是16减去5的结果。
分析:
要使 a-b要最大,只有a最大且a右边的数要最小,这样得到的结果才是正确的。
所以第一步,找到除最后一个元素外最大的那个元素,再找到最大元素之后的元素中最小的一个数,它们的差才是我们要的结果。
/*在数组中,每个数字减去它右边的所有数字得到一个数对之差。求所有数对之差的最大值。例如在数组{2, 4, 1, 16, 7, 5, 11, 9}中,数对之差的最大值是9,是16减去5的结果。
*/#include <stdio.h>
#include <assert.h>int getMax(int a[], int len)
{int i, maxi = 0, min;assert(len > 1); // num of a-array must be large than 1for(i = 1; i < len-1; i++) // maxi指向a[0 ~ len-2]中最大元素的下标{if(a[maxi] < a[i])maxi = i;}min = a[maxi+1];for(i = maxi+1+1; i < len; i++) // min=a[maxi+1 ~ len-1]中的最小元素{if(min > a[i])min = a[i];}return (a[maxi] - min);
}int main()
{int a[] = {2, 4, 1, 16, 7, 5, 11, 9};int max = getMax(a, sizeof(a) / sizeof(a[0]));printf("max=%d\n", max);return 0;
}
这个程序在运行时,一定要保证数组元素必须在2个及以上,否则就失去了题目的本意!