如何对数组中的数字进行频率分析

时间:2019-10-12 16:13:51

标签: c

我是编程新手,我正在尝试编写一个程序,让用户输入从0到1000的数字,并且用户可以输入的最大数字为100。数字应在数组中列出(不要必须按顺序排列),并且当用户键入一个负数时程序结束。之后,程序应确定哪个数字出现次数最多和发生多少次。

问题是我不知道从哪里开始,我已经做过类似的代码,但这是针对一组具有预定数组大小的随机数字

#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');

}

我正在考虑将其修改为具有指针,并让用户输入自己的数字而不是随机数。如果有人可以帮助完成此过程,

1 个答案:

答案 0 :(得分:2)

您将需要第二个数组来计算频率。最坏的情况是,用户输入了唯一的数字,因此第二个数组应与myNumbers一样大。该数组将包含两个值:数字及其计数:

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

您还记得myCount的第一个可用条目:

int m= 0;

您可以遍历所有数字:

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

对于每个数字,请检查它是否已经在myCount中;如果是,请增加计数,然后退出循环:

        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++;
        }
    }

现在,您可以在数组中搜索计数最高的数字。

集成的代码是:

    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++;
        }
    }

操作:在数组中搜索计数最高的数字。