что делает "frec [v1 [i]] ++" в этом коде в C - PullRequest
0 голосов
/ 16 марта 2019
#include<stdio.h>

int i;
int main()
{
   int frec[1000000]={0};
    int v1[10];

    for(i=0;i<10;i++)
    {
        scanf("%d", &v1[i]);
    }

    for(i=0;i<10;i++)
    {
        frec[v1[i]]++;
    }
    for(i=0;i<1000000;i++)
    {
        if(frec[i])
        {
            printf("number %d repeat off %d \n",i, frec[i]);
        }
    }
    return 0;
}

Мне нужно сделать программу, которая показывает людям частоту элементов массивов в C Что делает frec [v1 [i]] ++

Может ли это быть проще и понятнее?

Ответы [ 2 ]

0 голосов
/ 16 марта 2019

Он просто считает количество вхождений целых символов в заданном строковом литерале.Для простоты вы можете думать так:

char const * v1 = "tester";
...
v1[0] holds 't'
v1[1] holds 'e'
v1[2] holds 's'
v1[3] holds 't'
v1[4] holds 'e'
v1[5] holds 'r'

Когда вы говорите frec[ v1[i] ]++; для каждого символа, frec[ 't' ] и frec[ 'e' ] содержат значение 2, другие '1,Это именно то, что делает код.

0 голосов
/ 16 марта 2019

Сначала инициализируйте count как 0. Затем проходите массив линейным образом.Для каждого элемента, который соответствует elm, просто увеличьте count.

/* C function to count occurrences of an element in an unsorted array */ 

int frequency(int array[], int array_size, int elm) 
{ 
    int count = 0; 
    for (int i = 0; i < array_size; i++) 
       if (array[i] == elm)  
          count++; 
    return count; 
} 

Если ваш массив отсортирован, вы можете оптимизировать его для работы в O(Log n) времени, используя `Binary Searchè .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...