演算法筆記 03 眾數問題

2021-08-09 01:23:16 字數 1506 閱讀 1890

給定含有 n 個元素的多重集合 s,每個元素在 s 中出現的次數稱為該元素的重數。多重集 s 中重數最大的元素稱為眾數。 

例如,s=。多重集 s 的眾數是 2,其重數為 3。

對於給定的由 n 個自然數組成的多重集 s,程式設計計算 s 的眾數及其重數。
① 當接收到 n 個資料,首先將其存入乙個陣列;

② 然後將這些資料進行從小到大的排序;

③ 要知道使用者輸入的資料即使排列好之後,相鄰的資料也可能不是按照差值為 1 來遞增的(可能為 2,4,4,7……)

所以當出現相鄰資料相等時,該如何來記錄相同資料的個數呢。

因此在這裡要用位址的差值來計算,資料不會像 1,2,3…… 這樣來排序,但位址是這樣子

所以只要設定兩個指標來依次指向相鄰資料的兩個位址,當出現相同資料時,讓前乙個指標指向第乙個重複的資料,

將後乙個指標指向最後乙個重複資料的之後乙個資料(參考:2~7 有幾個數? 答:7-2+1)

接著用後乙個指標的位址,來減去第乙個指標的位址,差值即為該重複資料的個數;

④ 用上乙個步驟迴圈完所有資料後,將每乙個重複資料的差值大小進行比較並儲存,最後選擇出最大的即可。

// 演算法問題 2——1 眾數問題(只寫了整數的,浮點數同理,無非改改型別)

// 程式中我加了不少非必要的回車換行,意在使程式更清晰一些

// 注意:陣列名 a = &a = &a[0]

#include "stdafx.h"

#include

#include //標準庫標頭檔案

#include //演算法庫標頭檔案(各種函式)

#define max 10 //巨集定義乙個 max 為 10 ,在下面用於定義陣列的大小,方便修改

#define inf 0xffff //巨集定義乙個最大數,65535

using

namespace

std;

int record[max]; //定義乙個儲存輸入資料的陣列,大小設定為 10

int n; //定義使用者實際要輸入的資料總數 n

int mode, num_quantity; //定義眾數為 mode,定義眾數的數量為 num_quantity

int main()

source = target; //令二者的位址相同

target++; //target 位址 +1

}printf("the mode is: %d\n", mode);

printf("and its count is: %d\n", num_quantity);

system("pause"); //暫停一下程式,顯示輸出

演算法 眾數問題

眾數問題 description 給定含有n個元素的多重集合s,每個元素在s中出現的次數稱為該元素的重數。多重 集s中重數最大的元素稱為眾數。例如,s 多重集s的眾數是2,其重數為3。程式設計任務 對於給定的由n 個自然數組成的多重集s,程式設計計算s 的眾數及其重數。input 輸入資料第1行多重...

分治演算法 眾數問題

problem description 給定含有n個元素的多重集合s,每個元素在s 現的次數稱為該元素的重數。多重集s中重數最大的元素稱為眾數。例如,s 多重集s的眾數是2,其重數為3。對於給定的由n 個自然數組成的多重集s,計算s的眾數及其重數。如果出現多個眾數,請輸出最小的那個。input 輸入...

演算法設計 眾數問題

眾數問題 time limit 2000 ms memory limit 65536 kib problem description 給定含有n個元素的多重集合s,每個元素在s 現的次數稱為該元素的重數。多重集s中重數最大的元素稱為眾數。例如,s 多重集s的眾數是2,其重數為3。對於給定的由n 個自...