怎么用c语言编程实现下述函数功能接口,跪求大佬 - 爱问答

(爱问答)

怎么用c语言编程实现下述函数功能接口,跪求大佬

int getMostJumps(int *inputArray,int n,int *outputIndexArray,int m);
 
输入: n个不小于0的整数,(n为动态可变),输出:相邻两个数字的变化的绝对值,按照从大到小的降序排列, 输出前m 个变化最大的位标,(m 为动态参数),
如果有相同的变化大小,则从位标从小到大来排列,
如果 相邻数字变化的个数小于m个,则输出 实际的个数。
函数返回值为 输出的数列的个数。
 
例如: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
};
假设outputArray指向一个大于m 的数组,
则 调用 getMostJumps(inputArray,20,outputArray,5),应该返回5,
outputArray 将被填充为:
{
18,13,15,6,12
}

纯算法的问题,有点小复杂 ,以下是我写的程序参考

#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语言编程实现下述函数功能接口,跪求大佬

符合你的要求,只是

***如果 相邻数字变化的个数小于m个,则输出 实际的个数。

这个变化个数我理解是可以重复的,否则如

{1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20}

这样的数据,只有一个输出了


相关标签:c语言

下一篇:如何让虚拟机防止被检测出来

上一篇:使用mp3gain时总是出现问题

热门标签:
excel 网盘 破解 word dll
最新更新:
微软重新评估新的Outlook的使用时机 联想推出搭载联发科Helio G80芯片组的Tab M9平板 英特尔创新大赛时间确定! 微软Edge浏览器在稳定渠道中推出Workspaces功能 英伟达RTX4060TiGPU推出MaxSun动漫主题! 谷歌地图为用户提供了街景服务! GameSir 在T4 Kaleid中推出了一款出色的控制器! 微软开始在Windows 11 中测试其画图应用程序的新深色模式! LG电子推出全球首款无线OLED电视 英伟达人工智能芯片崭露头角! Steam Deck可以玩什么游戏-Steam Deck价格限时优惠 雷蛇推出CobraPro鼠标 Kindle电子阅读器可以访问谷歌商店吗 Windows10如何加入组策略 window10图片查看器怎么没有了?