c - 在C中的int数组中查找数字的频率

标签 c arrays function io frequency

我正在尝试编写一个函数,它将数组的大小和由数字组成的 int 数组作为输入并打印每个数字的频率。

示例输入和输出:

Input: [1,2,2,3,3,3]

Output:
1 occurs 1 times.
2 occurs 2 times
3 occurs 3 times.

这是我的尝试(不是最优雅的):

void freq(int size, int numArray[]) {
    int one=0, two=0, thr=0, fou=0, fiv=0, six=0, sev=0, eit=0, nin=0;
    int i, j;

    for (i = 0; i < size; i++) {
        for (j = 1; j < size; j++) {
            if (numArray[i] == numArray[j] && numArray[i] == 1) {
                one+=1;
            }
            else if (numArray[i] == numArray[j] && numArray[i] == 2) {
                two+=1;
            }
            else if (numArray[i] == numArray[j] && numArray[i] == 3) {
                thr+=1;
            }
            else if (numArray[i] == numArray[j] && numArray[i] == 4) {
                fou+=1;
            }
            else if (numArray[i] == numArray[j] && numArray[i] == 5) {
                fiv+=1;
            }
            else if (numArray[i] == numArray[j] && numArray[i] == 6) {
                six+=1;
            }
            else if (numArray[i] == numArray[j] && numArray[i] == 7) {
                sev+=1;
            }
            else if (numArray[i] == numArray[j] && numArray[i] == 8) {
                eit+=1;
            }
            else if (numArray[i] == numArray[j] && numArray[i] == 9) {
                nin+=1;
            }
        }
    }
    printf("1 occurs %d times.\n", one);
    printf("2 occurs %d times.\n", two);
    printf("3 occurs %d times.\n", thr);
    printf("4 occurs %d times.\n", fou);
    printf("5 occurs %d times.\n", fiv);
    printf("6 occurs %d times.\n", six);
    printf("7 occurs %d times.\n", sev);
    printf("8 occurs %d times.\n", eit);
    printf("9 occurs %d times.\n", nin);
}

这有问题。如果我使用与上面相同的示例,这就是我得到的:

Input: [1,2,2,3,3,3]

Output:
1 occurs 0 times.
2 occurs 4 times.
3 occurs 9 times.

最佳答案

嵌套循环方法没有任何意义,您只需查看每个数字一次即可计数。当然,用数组来保存计数器更有意义:

void freq(int size, const int *numbers)
{
  unsigned int counts[10] = { 0 };
  for(int i = 0; i < size; ++i)
  {
    const int here = numbers[i];
    if(here >= 1 && here <= 9)
      counts[here]++;
  }
  for(int i = 1; i < 10; ++i)
    printf("%d occurs %u times\n", i, counts[i]);
}

关于c - 在C中的int数组中查找数字的频率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39245576/

相关文章:

c - 在 OS X 中使用 C 语言的 libpcap 时出现问题

R:枚举可能的序列以打破排名中的平局

c++ - 递归幂

将 8 位 sse 寄存器转换为 16 位短路

c - 关于如何使用指针将数组作为函数参数传递的代码片段的说明?

java - 这个二维数组有什么问题?

java - 如何将字符串参数拼凑在一起形成现有符号?

c - 将指向(char)的指针数组传递给函数并为每个函数分配一个字符串

c - 共享内存访问 CUDA 中的垃圾值

javascript - 无法理解为什么使用展开运算符