1 int func(int* arr,int len,int n)//求前n大的项之和
2 {
3 int sum = 0;
4 int i;
5 int temp;
6 for(i = 1;i<=n;i++)//求最前三大值和
7 {
8 temp = func2(arr,len,i);
9 printf("%d\n",temp);
10 sum += temp;
11 }
12 return sum;
13 }
14 //获取所有元素中第n大的元素//(实现求任意次最值功能)
15 int func2(int* arr,int len,int n)//求第n大的元素
16 {
17 int i;
18 int numTemp = ~(1<<31);//int能表示的最大正数
19 for(i=1;i<=n;i++)
20 numTemp = func1(arr,len,numTemp);
21
22 return numTemp;
23 }
24
25
26 //求当前所有项中仅次于num的最大值
27 int func1(int* arr,int len,int num)
28 {
29 int i;
30 int subm = 1<<31;//int能表示的最小负数
31 for(i = 0;i<len;i++)
32 {
33 if(arr[i] < num)
34 {
35 if(subm < arr[i])
36 subm = arr[i];
37 }
38 }
39 return subm;
40 }
41 int main()
42 {
43 int arr[] = {11,69,1,77,22,81,9,12,55,0};
44 //打印最大子序列之和
45 printf("%d",func(arr,sizeof(arr)/sizeof(int),3));
46 }