簡體   English   中英

查找數組中最頻繁的數字

[英]find the most frequent number in an array

我最近開始學習C,並且遇到了這個小測試。

編寫一個從用戶那里讀取10個數字的代碼。

打印最大和最小輸入的值,然后打印最頻繁的數字。

對我來說,一切都很簡單,但最頻繁的數字讓我發瘋,我搜索了一段時間,找不到任何明確的答案。

我寫的代碼

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int hi[10], i=0, largest, smallest;
    while(i<10)
    {
        printf("Enter a number:");
        scanf("%d", &hi[i]);
        i++;
    }
    smallest = hi[0];
    largest = hi[0];
    printf("Entered Numbers: ");
    while(i!=0)
    {
        if(hi[10-i] < smallest) { smallest = hi[10-i]; }
        if(hi[10-i] > largest) { largest = hi[10-i]; }
        printf("%d | ", hi[10-i]);
        i--;
    }

    printf("\nLargest number is = %d || Smallest number is = %d", largest, smallest);
    return 0;
}

我想到的唯一想法是:

  • 制作另一個數組。

  • 在原始數組中獲取[i]的值。

  • 將[i]與原始數組的其余值比較(如果它們相等或不相等)。

  • 如果其他數組的值相等,則增加它們的值。

  • 檢查另一個數組中的最大值,該最大值應該是最頻繁的數字。

  • 現在,我知道了最頻繁元素的順序以及該元素被輸入了多少次。

使用哈希圖會更有效。 在那里,您可以使用輸入數字作為鍵並將值設置為1。當用戶提供了新數字時,您只需檢查新數字是否已經在地圖中。 如果是這樣,則將值設置為2,否則將新值添加為1。

小豬支持Markus所說的話,哈希圖確實是通用解決方案的理想選擇,因此您可以減少漸近時間,但是由於您只做10個數組,所以使用2D數組存儲頻率就可以了。

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int hi[10][2], i=0,j=0,largest, smallest;

    while(i<10)
    {
        printf("Enter a number:");
        scanf("%d", &hi[i][0]);
        i++;
    }
    smallest = hi[0][0];
    largest = hi[0][0];
    printf("Entered Numbers: ");
    while(i!=0)
    {
        hi[10-i][1] = 0;
        if(hi[10-i][0] < smallest) { smallest = hi[10-i][0]; }
        if(hi[10-i][0] > largest) { largest = hi[10-i][0]; }
        printf("%d | ", hi[10-i][0]);
        i--;
    }
    int most_freq = 0;
    for (i = 0; i < 10; i++){
        for (j = 0; j < 10; j++){
            if(hi[i][0] == hi[j][0]){
                hi[i][1]++;
                if (hi[i][1] > most_freq){
                    most_freq = hi[i][0];
                }
            }
        }
    }

    printf("\nLargest number is = %d || Smallest number is = %d", largest, smallest);
    printf("\nMost frequent is = %d\n", most_freq);
    return 0;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM