资讯详情

编程实现getMostJumps()函数功能接口:

主题编程实现以下函数功能接口:

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、42、33、33、55};

所以相邻的变化 为

{5、8、9、3、6、9、11、5、3、7、3、9、11、20、2、3、0、22};

假设outputArray指向大于m调用数组 getMostJumps(inputArray,20,outputArray,5)应返回5,

outputArray {18,13,15,6,12}

代码

#include "pch.h" #include <map>        #include<iostream> #include<string> #include<algorithm> #include<vector> using namespace std;  int getMostJumps(int *inputArray, int n, int *&outputIndexArray, int m) {  map<double, int >tem;  double key;  printf("\n输出相邻两个数字的绝对值:\n");  for (int i = 0; i < n-1; i  ) {   key = abs(inputArray[i   1] - inputArray[i]);   printf("%.0lf\t", key);   while (tem.find(key) != tem.end()) {    key -= (double)1/n;//微调key值,避免丢失相同差值的数据   }   tem.insert(make_pair(key, i));  }  printf("\n");  int i = 0,j=0;  auto iter = tem.end();//此时iter指向尾迭代器的下一个位置  --iter;//此时iter指向尾迭代器  printf("\n按从大到小的降序排列,输出前%d变化最大的位标(%d动态参数:\n",m,m);  do {   if (i < m) {    outputIndexArray[i] = iter->second;    printf("%d\t", iter->second);    i  ;   }   else {    break;   }  } while (iter-- != tem.begin());  printf("\n");  return i; } int main() {  //输入n个不小于0的整数,(n动态可变)  vector<int> inp;  int *inputArray,*outputArray;  int i,result=0;  while (true) {   printf("以空格分隔,请输入至少2个不小于0的整数,以换"    "行结束输入\n下面一行可以复制粘贴\n5 10 32 9 12 18 9 20 25 22 "    "15 18 9 20 40 42 30 33 33 55\n\n输入:");   while (1) {    cin >> i;    inp.push_back(i);    if (cin.get() == '\n')     break;   }   if (inp.size() >= 2)break;//2个数以上计算差值   else {    printf("输入不符合要求\n\n");    vector <int>().swap(inp);   }  }  int n = inp.size();  inputArray = (int*)malloc(sizeof(int)*n);  copy(inp.begin(), inp.end(), inputArray);  int m = 5;//m 为动态参数  outputArray = (int*)malloc(sizeof(int)*m);  for (int i = 0; i < m; i  ) {   outputArray[i] = 0;  }//初始化outputArray  result=getMostJumps(inputArray, n, outputArray, m);  printf("\noutputArray此时数组的值为:");  for (int i = 0; i < m;i  ) {   printf("%d\t", outputArray[i]);  }  printf("\ngetMostJumps函数返回值为:");  printf("%d\n", result);   return 0; }

标签: eaco电容900v600uf

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台