【问题标题】:How do I print the amount of digits between 0 -9 in an array with a specific size?如何在具有特定大小的数组中打印 0 -9 之间的位数?
【发布时间】:2022-01-11 00:35:22
【问题描述】:

我有一个数组,它的大小是 15,每个元素都有一个正数。如何计算 0 到 9 之间的每个数字在我的数组中出现的次数并打印出“o 出现 x 次,1 出现 y 次,2 出现 z 次”,一直到 9

【问题讨论】:

  • 创建一个由 10 个元素对应的数字组成的数组,然后增加给定数字的元素。
  • 嗨 Sharon Biran,您对 java 或 C++ 的答案是否满意? (我这样问是为了让一位需要知道但还不能对自己提出的问题发表评论的回答者的利益。)

标签: arrays c


【解决方案1】:

这里提出的问题是计算数组中每个数字的频率。所以最好使用 hashmap 数据结构以更精简的时间复杂度来计算它。哈希图的键将是数组的每个数字,相应的值是它的频率。 这种方法是动态的,不需要初始化一个固定大小的辅助数组来保存频率。

Map<Integer, Integer> map = new HashMap<>();
for(Integer digit: Array){
   if(map.containsKey(digit)){
      map.put(digit, map.get(digit)+1);
   }
   else  map.put(digit,1);
}

所以地图将包含: 键-> 数字; value->对应的频率

【讨论】:

  • 哪个C编译器可以用来编译这段代码?它看起来很像 C++...
  • 这段代码是java的,但是类似的数据结构和逻辑也可以用在c++上,理解了这个方法就可以用其他语言实现了
  • 所以您认为将其转换为“简单”的 C++ 可以回答标记为“C”的问题?您似乎没有意识到 C 和 C++ 之间的区别。您的代码的每一行都包含至少一个不能轻易移植到 C 的构造或语法。至少这个问题的作者没有。
  • 如果您认为将其转换为 C 很容易,请这样做。或者让作者确认他们接受 C++ 中的答案并将其转换为 C++。或者让作者确认他们接受 java 中的答案。但是,meta.stackexchange.com/questions/214173/… 您最终可能会得到建议来回答您不需要首先澄清的问题。
【解决方案2】:

逻辑类似于计数排序。我认为您最好阅读有关计数排序的说明:Counting Sort

以下代码可能会回答您的问题:

#include <stdio.h>

#define ARR_SIZE 15
#define COUNT_ARR_SIZE 10

int main()
{
    int i = 0;
    int arr[ARR_SIZE] = {0,1,1,2,2,2,9,3,4,3,2,5,6,7,8};
    int countArr[COUNT_ARR_SIZE] = {0};
    
    for(i = 0; i < ARR_SIZE; i++)
        countArr[arr[i]]++;
        
    for(i = 0; i < COUNT_ARR_SIZE; i++)
        printf("Number %d appears %d times in the array\n", i,countArr[i]);
    
    return 0;
}

注意:代码是用C语言编写的。

【讨论】:

【解决方案3】:

这就是我要做的(假设第一个数组中的数字只有一位):

let numbersCount = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0] //each index is for numbers from 0 to 9
let myArray = [1, 1, 1, 2,...] // array of numbers with positive digits
myArray.foreach(num => numbersCount[num]++);
console.log(numbersCount) // numbersCount = [0, 3, 1, ...]; 

其中0是myArray中0的个数,3是1的个数,1是2的个数,...

【讨论】:

  • 那是伪代码吧?
  • @Yunnosch 是的。您可以轻松地将其转换为您使用的任何语言。
  • 糟糕。对不起。刚刚编辑。 @Yunnosch
  • 请确认您知道meta.stackoverflow.com/questions/334822/… 如果您提到那里描述的妥协作为您(否则不是很有帮助)答案的概念,那么我会故意和适当地间接考虑... . 即表达我的感激之情... ;-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-07-11
  • 2016-03-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-28
  • 2020-08-28
相关资源
最近更新 更多