zellez11
zellez11

Reputation: 400

Frequency of an Element Accruing In an Array

I am new to programming, I am trying to write a program that lets the user input numbers ranging from 0 to 1000, and the maximum number the user can input is 100. The numbers in the array don't have to be in order, and the program ends when the user inputs a negative number. After that, the program should determine which number occurs the most and the frequency of that occurrence.

I have written a similar code but not for this type of problem the code below showcases what I mean by similar code and any help would be appreciated

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main() {
char again;
do {
    srand(time(0));
    int myNumbers[10];
    int i, n, findnum, time, num;
    n = 10;
    for (i = 0; i < n; i++) {
        myNumbers[i] = rand() % 10 + 1;
    }
    for (i = 0; i < n; i++) {
        printf("elements %d\n", myNumbers[i]);
    }
    printf("Enter number to find Occurrence: ");
    scanf("%d", &findnum);
    time = 0;
    for (i = 0; i < n; i++) {
        if (myNumbers[i]==findnum)
                    time++;
    }
    if (findnum>0) {
        printf("Occurrence of %d is: %d times\n",findnum,time);
    } else {
        printf("The number %d is not present in the array\n",num);
    }
    do {
        printf("Shall we play again (y/n)?: ");
        while(getchar()!='\n');
        scanf("%c", &again);
    }
    while(again !='y' && again !='n');
}
while(again =='y');

}

Upvotes: 0

Views: 165

Answers (1)

Paul Ogilvie
Paul Ogilvie

Reputation: 25286

You will need a second array to count the frequencies. Worst case, the user entered unique numbers, so the second array should be as large as myNumbers. The array will hold two values: the number, and its count:

int myNumbers[10];
int myCount  [10][2] = {0};
int n= 10;

You remember the first entry of myCount that is available:

int m= 0;

You cycle over all numbers:

    for (i = 0; i < n; i++){

For each number, you check if it is already in the myCount and if yes, increment the count and then exit the loop:

        for (j = 0; j < m; j++){
            if (myCount[j][0] == myNumbers[i]){
                myCount[j][1]++;
                break;
            }
        }

If the number was not found, you add it:

        if (j == m) {
            myCount[m][0] = myNumbers[i];
            myCount[m][1] = 1;
            m++;
        }
    }

Now you can search the array for the number with the highest count.

Integrated the code is:

    int myNumbers[10];
    int myCount  [10][2] = {0};
    int n= 10;
    int m= 0;

    /* now fist read the input */

    for (i = 0; i < n; i++){
        for (j = 0; j < m; j++){
            if (myCount[j][0] == myNumbers[i]){
                myCount[j][1]++;
                break;
            }
        }
        if (j == m) {
            myCount[m][0] = myNumbers[i];
            myCount[m][1] = 1;
            m++;
        }
    }

To do: search the array for the number with the highest count.

Upvotes: 3

Related Questions