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 ",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 }