ZHEN_XIAO123 2014-06-27 03:28 采纳率: 0%
浏览 1681

做一道题,遇到一些疑问。public static int[] 函数 ;

取出整型数据中出现次数最多的元素,并按照升序排列返回。

要求实现方法:
public static int[] calcTimes(int[] num, int len);

【输入】 num:整型数组;

     len 输入的整数个数

【返回】 按照升序排列返回整型数组中出现次数最多的元素

【注意】只需要完成该函数功能算法,中间不需要有任何IO的输入输出

示例
输入:num = {1,1,3,4,4,4,9,9,9,10} len = 10

返回:{4,9}

这是我用 c++编写的代码

#include
#include
using namespace std;
/*
在数组arr_num中查找 num,如果有,将对应的arr_count 加1,如果没有,在arr_num中添加,
设置arr_count 设置为1,并且相应的计数器加1;

*/
void find (int & num_,int *arr_num,int *arr_count,int &count)
{
for(int j =0 ;j <count ;j++)
if(arr_num[j] == num_)
arr_count[j]++;
arr_num[count] = num_;
arr_count[count]= 1;
count++;
}

int calcTimes (int num ,int len)
{
if (len == 0)
return 0;
int count = 0,dex =0 ;
//创建两个数字,一个用来存放数字,一个用来存放该数字出现的次数
int *arr_count = new int[len];
int *arr_num = new int [len];
for(dex =0 ;dex <len ;dex++)
find (num[dex],arr_num,arr_count,count);
int max = -1;
int numb ;
//arr_cout出现的最大值,该最大值出现的次数。
for(dex = 0 ;dex < count ;dex++)
if(max < arr_count[dex])
{
max = arr_count[dex];
numb =1;
}
else
if(max == arr_count[dex] )
numb++;
int *out_out = new int [numb];
int i = 0;

//将出现次数最多的赋值给另外一个数组。
for(dex = 0 ;dex < count ;dex++)
if (arr_count[dex] == max)
{
out_out[i] = arr_num[dex];
i++;
}

delete [] arr_count;
delete [] arr_num;
//对出现次数最多的数字进行排序 
sort(out_out,out_out+numb);
//自己检验下  
for(int jj =0 ;jj<numb;jj++)
    cout<<out_out[jj]<<"   "<<jj<<endl;
return out_out;

}

int main()
{
int num[] = {1,1,3,4,4,4,9,9,9,10}, len = 10;
int * out = calcTimes(num,len);
//这边该如何 sizeof (out) 是一个指针的长度,它不能用来判断数组的个数
int n = sizeof(out)/sizeof(int);
for(int i =0 ;i<n ;i++)
cout<<out[i]<<ends;
cout<<endl;

}

最后输出的时候,出现问题,不知道是最后sizeof(out)/size(int)出错,还是没有按照要求pbulic static int [] calcTimes()写,我对这个public static 不太了解 还是这本来就是java中的,不是C++的?

  • 写回答

1条回答

  • ChatGPTᴼᴾᴱᴺᴬᴵ 2023-03-13 13:13
    关注

    该回答引用ChatGPT

    这个题目的函数声明 public static int[] calcTimes(int[] num, int len) 是 Java 语言的函数声明格式,不是 C++ 语言的。Java 中的 public 和 static 关键字分别表示这个函数是公开的(可以被其他类调用)和静态的(可以直接使用类名调用,不需要实例化对象)。


    在 C++ 中,可以直接使用 int* 类型来代替 Java 中的 int[] 类型,但是函数声明和定义需要按照 C++ 的语法格式来写,例如:

    int* calcTimes(int* num, int len) {
      // 函数实现
    }
    

    另外,关于输出部分,sizeof(out) 返回的是 out 这个指针类型的大小,而不是数组的大小。在 C++ 中,如果要在函数中返回动态分配的数组,需要在函数中使用 new 进行内存分配,然后在函数外部使用 delete 释放内存。同时,需要把数组的大小作为另一个参数传递进去,例如:

    void calcTimes(int* num, int len, int** out_out, int* out_len) {
      // 函数实现
      // 计算出最终结果,并分配动态内存到 *out_out 中,数组长度存放在 *out_len 中
    }
    

    在主函数中,使用类似下面的方式来调用函数和输出结果:

    int main() {
      int num[] = {1, 1, 3, 4, 4, 4, 9, 9, 9, 10};
      int len = 10;
      int* out_out;
      int out_len;
      calcTimes(num, len, &out_out, &out_len);
      for (int i = 0; i < out_len; i++) {
        std::cout << out_out[i] << " ";
      }
      std::cout << std::endl;
      delete[] out_out;
      return 0;
    }
    

    注意需要在最后释放 out_out 指向的内存,以避免内存泄漏。

    评论

报告相同问题?

悬赏问题

  • ¥15 求差集那个函数有问题,有无佬可以解决
  • ¥15 【提问】基于Invest的水源涵养
  • ¥20 微信网友居然可以通过vx号找到我绑的手机号
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名
  • ¥65 汇编语言除法溢出问题