计算数字在数组中出现的次数 [英] Count the number of times a number appears in an array

查看:66
本文介绍了计算数字在数组中出现的次数的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在研究一个小程序,该程序计算整数在数组中出现的次数. 我设法做到了,但是有一件事我无法克服.

I'm working on a small program that counts the number of times an integer appears in an array. I managed to do this but there is one thing I can't overcome.

我的代码是:

#include <stdio.h>

int count_occur(int a[], int num_elements, int value);
void print_array(int a[], int num_elements);

void main(void)
{
  int a[20] = {2, 5, 0, 5, 5, 66, 3, 78, -4, -56, 2, 66, -4, -4, 2, 0, 66, 17, 17, -4};
  int num_occ, i;

  printf("\nArray:\n");
  print_array(a, 20);

  for (i = 0; i<20; i++)
  {
    num_occ = count_occur(a, 20, a[i]);
    printf("The value %d was found %d times.\n", a[i], num_occ);
  }
}

int count_occur(int a[], int num_elements, int value)
/* checks array a for number of occurrances of value */
{
  int i, count = 0;
  for (i = 0; i<num_elements; i++)
  {
    if (a[i] == value)
    {
        ++count; /* it was found */
    }
  }
  return(count);
}

void print_array(int a[], int num_elements)
{
  int i;
  for (i = 0; i<num_elements; i++)
  {
    printf("%d ", a[i]);
  }
  printf("\n");
}

我的输出是:

Array:
2 5 0 5 5 66 3 78 -4 -56 2 66 -4 -4 2 0 66 17 17 -4 
The value 2 was found 3 times.
The value 5 was found 3 times.
The value 0 was found 2 times.
The value 5 was found 3 times.
The value 5 was found 3 times.
The value 66 was found 3 times.
The value 3 was found 1 times.
The value 78 was found 1 times.
The value -4 was found 4 times.
The value -56 was found 1 times.
The value 2 was found 3 times.
The value 66 was found 3 times.
The value -4 was found 4 times.
The value -4 was found 4 times.
The value 2 was found 3 times.
The value 0 was found 2 times.
The value 66 was found 3 times.
The value 17 was found 2 times.
The value 17 was found 2 times.
The value -4 was found 4 times.

如何避免输出中出现双行?

How can I avoid double lines in the output?

推荐答案

您可以使用并行数组,本示例使用char[20]来节省一些空间:

You can use a parallel array, this example uses char[20] in order to save some space:

#include <stdio.h>

int count_occur(int a[], char exists[], int num_elements, int value);
void print_array(int a[], int num_elements);

int main(void) /* int main(void), please */
{
    int a[20] = {2, 5, 0, 5, 5, 66, 3, 78, -4, -56, 2, 66, -4, -4, 2, 0, 66, 17, 17, -4};
    char exists[20] = {0}; /* initialize all elements to 0 */
    int num_occ, i;

    printf("\nArray:\n");
    print_array(a, 20);

    for (i = 0; i < 20; i++)
    {
        num_occ = count_occur(a, exists, 20, a[i]);
        if (num_occ) {
            exists[i] = 1; /* first time, set to 1 */
            printf("The value %d was found %d times.\n", a[i], num_occ);
        }
    }
}

int count_occur(int a[], char exists[], int num_elements, int value)
/* checks array a for number of occurrances of value */
{
    int i, count = 0;

    for (i = 0; i < num_elements; i++)
    {
        if (a[i] == value)
        {
            if (exists[i] != 0) return 0;
            ++count; /* it was found */
        }
    }
    return (count);
}

void print_array(int a[], int num_elements)
{
    int i;
    for (i = 0; i<num_elements; i++)
    {
        printf("%d ", a[i]);
    }
    printf("\n");
}

此方法更快,因为它会跳过已读取的值并从count_ocurr中的i开始迭代:

This method is faster, as it skips values already readed and starts iterating from i in count_ocurr:

#include <stdio.h>

int count_occur(int a[], char map[], int num_elements, int start);
void print_array(int a[], int num_elements);

int main(void)
{
    int a[20] = {2, 5, 0, 5, 5, 66, 3, 78, -4, -56, 2, 66, -4, -4, 2, 0, 66, 17, 17, -4};
    char map[20] = {0};
    int num_occ, i;

    printf("\nArray:\n");
    print_array(a, 20);

    for (i = 0; i < 20; i++)
    {
        if (map[i] == 0) {
            num_occ = count_occur(a, map, 20, i);
            printf("The value %d was found %d times.\n", a[i], num_occ);
        }
    }
}

int count_occur(int a[], char map[], int num_elements, int start)
/* checks array a for number of occurrances of value */
{
    int i, count = 0, value = a[start];

    for (i = start; i < num_elements; i++)
    {
        if (a[i] == value)
        {
            map[i] = 1;
            ++count; /* it was found */
        }
    }
    return (count);
}

void print_array(int a[], int num_elements)
{
    int i;
    for (i = 0; i< num_elements; i++)
    {
        printf("%d ", a[i]);
    }
    printf("\n");
}

这篇关于计算数字在数组中出现的次数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆