怎么用c語言編程實(shí)現(xiàn)下述函數(shù)功能接口,,跪求大佬
int getMostJumps(int *inputArray,int n,int *outputIndexArray,int m);輸入: n個(gè)不小于0的整數(shù),,(n為動(dòng)態(tài)可變),輸出:相鄰兩個(gè)數(shù)字的變化的絕對(duì)值,,按照從大到小的降序排列,, 輸出前m個(gè)變化最大的位標(biāo),,(m 為動(dòng)態(tài)參數(shù)),如果有相同的變化大小,則從位標(biāo)從小到大來排列,,如果 相鄰數(shù)字變化的個(gè)數(shù)小于m個(gè),,則輸出實(shí)際的個(gè)數(shù),。函數(shù)返回值為 輸出的數(shù)列的個(gè)數(shù)。例如:int inputArray[20]={5, 10, 18, 9, 12, 18, 9, 20,25,22,15,18,9,20,40,42,30,33,33,55};那么相鄰的變化 為{5,,8,,-9,3,,6,,-9,11,,5,,-3,-7,,3,,-9,11,,20,2,,-12,,3,0,,22},;假設(shè)outputArray指向一個(gè)大于m的數(shù)組,則調(diào)用 getMostJumps(inputArray,20,outputArray,5),,應(yīng)該返回5,,outputArray 將被填充為:{18,13,,15,,6,12}
純算法的問題,,有點(diǎn)小復(fù)雜 ,,以下是我寫的程序參考
#include <stdio.h>#include <stdlib.h>int sort_function( const void *a, const void *b){return *(int *)b-*(int *)a;}int findpos(int *p,int k,int n){int i;for(i=0; i<n; i++)if(p[i]==k){p[i]=-1;break;}return i;}int getMostJumps(int *inputArray,int n,int *outputIndexArray,int m){int i,j;int *temp,*temp1;temp=(int *)malloc(n*sizeof(int));temp1=(int *)malloc(n*sizeof(int));for(i=1; i<n; i++){temp[i-1]=inputArray[i]-inputArray[i-1];if (temp[i-1]<0)temp[i-1]=-temp[i-1];temp1[i-1]=temp[i-1];}qsort(temp,n-1,sizeof(int), sort_function);if (n-1<m)m=n-1;for(i=0; i<m; i++)outputIndexArray[i]=findpos(temp1,temp[i],n-1);free(temp);free(temp1);return m;}int main(){int i, m;int inputArray[20]=//{1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20} ;{5, 10, 18, 9, 12, 18, 9, 20,25,22,15,18,9,20,40,42,30,33,33,55};int outputArray[5];m=getMostJumps(inputArray,20,outputArray,5);for(i=0; i<m; i++)printf("%d ",outputArray[i]);printf("");}
我的測(cè)試結(jié)果
符合你的要求,,只是
***如果 相鄰數(shù)字變化的個(gè)數(shù)小于m個(gè),,則輸出 實(shí)際的個(gè)數(shù)。
這個(gè)變化個(gè)數(shù)我理解是可以重復(fù)的,,否則如
{1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20}
這樣的數(shù)據(jù),,只有一個(gè)輸出了