在黑板上写了N个正整数组成的一个数列,进行如下操作: 每次擦去其中的两个数a和b,然后在数列中加入一个数a×b+1,如此下去直至黑板上 剩下一个数,在所有按这种操作方式最后得到的数中,最大的为max,最小的为min, 则该数列的极差定义为M=max-min。
贪心算法:每次擦出数列中的两个最小数,产生最大值max;
每次擦出数列中的两个最大数,产生最小值min;
Code
1#include <stdio.h>
2#include <string.h>
3#define clr(a) memset(a,0,sizeof(a))
4
5int n, data[50001];
6
7void bubble_sort();
8int cal_max(int data[]);
9int cal_min(int data[]);
10
11int main()
12{
13 int i, max, min;
14
15 while(scanf("%d", &n) && n>0){
16 for(i=1; i<=n; i++)
17 scanf("%d", &data[i]);
18 bubble_sort();
19/**//* for(i=1; i<=n; i++)
20 printf("%-3d", data[i]); */
21 max = cal_max(data);
22 min = cal_min(data);
23/**//* printf("max=%d min=%d\n", max, min); */
24 printf("%d\n", max-min);
25 }
26
27 return 0;
28}
29
30void bubble_sort()
31{
32 int i, j;
33
34 for(i=n; i>1; i--)
35 for(j=1; j<i; j++){
36 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
44int cal_max(int data[])
45{
46 int temp, t=1, i, j, a[50001];
47
48 for(i=1; i<=n; i++)
49 a[i] = data[i];
50 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
63int cal_min(int data[])
64{
65 int temp, t=n, i, j, a[50001];
66
67 for(i=1; i<=n; i++)
68 a[i] = data[i];
69 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}
1#include <stdio.h>
2#include <string.h>
3#define clr(a) memset(a,0,sizeof(a))
4
5int n, data[50001];
6
7void bubble_sort();
8int cal_max(int data[]);
9int cal_min(int data[]);
10
11int main()
12{
13 int i, max, min;
14
15 while(scanf("%d", &n) && n>0){
16 for(i=1; i<=n; i++)
17 scanf("%d", &data[i]);
18 bubble_sort();
19/**//* for(i=1; i<=n; i++)
20 printf("%-3d", data[i]); */
21 max = cal_max(data);
22 min = cal_min(data);
23/**//* printf("max=%d min=%d\n", max, min); */
24 printf("%d\n", max-min);
25 }
26
27 return 0;
28}
29
30void bubble_sort()
31{
32 int i, j;
33
34 for(i=n; i>1; i--)
35 for(j=1; j<i; j++){
36 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
44int cal_max(int data[])
45{
46 int temp, t=1, i, j, a[50001];
47
48 for(i=1; i<=n; i++)
49 a[i] = data[i];
50 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
63int cal_min(int data[])
64{
65 int temp, t=n, i, j, a[50001];
66
67 for(i=1; i<=n; i++)
68 a[i] = data[i];
69 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}