3.4 求数组前n大元素之和。

 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 }

猜你喜欢

转载自www.cnblogs.com/ZhuLuoJiGongYuan/p/9468000.html
3.4