在黑板上写了N个正整数组成的一个数列,进行如下操作: 每次擦去其中的两个数a和b,然后在数列中加入一个数a×b+1,如此下去直至黑板上 剩下一个数,在所有按这种操作方式最后得到的数中,最大的为max,最小的为min, 则该数列的极差定义为M=max-min。
贪心算法:每次擦出数列中的两个最小数,产生最大值max;
每次擦出数列中的两个最大数,产生最小值min;
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
Code
1
#include <stdio.h>
2
#include <string.h>
3
#define clr(a) memset(a,0,sizeof(a))
4![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
5
int n, data[50001];
6![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
7
void bubble_sort();
8
int cal_max(int data[]);
9
int cal_min(int data[]);
10![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
11
int main()
12![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
{
13
int i, max, min;
14
15![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
while(scanf("%d", &n) && n>0)
{
16
for(i=1; i<=n; i++)
17
scanf("%d", &data[i]);
18
bubble_sort();
19![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
/**//* for(i=1; i<=n; i++)
20
printf("%-3d", data[i]); */
21
max = cal_max(data);
22
min = cal_min(data);
23![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
/**//* printf("max=%d min=%d\n", max, min); */
24
printf("%d\n", max-min);
25
}
26![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
27
return 0;
28
}
29![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
30
void bubble_sort()
31![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
{
32
int i, j;
33![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
34
for(i=n; i>1; i--)
35![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
for(j=1; j<i; j++)
{
36![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
if(data[j] > data[j+1])
{
37
int temp = data[j];
38
data[j] = data[j+1];
39
data[j+1] = temp;
40
}
41
}
42
}
43![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
44
int cal_max(int data[])
45![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
{
46
int temp, t=1, i, j, a[50001];
47
48
for(i=1; i<=n; i++)
49
a[i] = data[i];
50![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
while(t < n)
{
51
temp = a[t]*a[t+1] + 1;
52
i = t+2;
53
while(a[i]<temp && i<=n)
54
i++;
55
for(j=t+2; j<i; j++)
56
a[j] = a[j+1];
57
a[i-1] = temp;
58
t ++;
59
}
60
return temp;
61
}
62![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
63
int cal_min(int data[])
64![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
{
65
int temp, t=n, i, j, a[50001];
66
67
for(i=1; i<=n; i++)
68
a[i] = data[i];
69![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
while(t > 1)
{
70
temp = a[t]*a[t-1] + 1;
71
i = t-2;
72
while(a[i]>temp && i>=1)
73
i--;
74
for(j=t-2; j>i; j--)
75
a[j] = a[j-1];
76
a[i+1] = temp;
77
t --;
78
}
79
return temp;
80
}