分治演算法 眾數問題

2021-10-22 14:41:28 字數 1473 閱讀 8015

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

集 s 中重數最大的元素稱為眾數。

例如,s=。

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

對於給定的由 n 個自然數組成的多重集 s,程式設計計算 s 的眾數及其重數。

輸入資料由檔名為 input.txt 的文字檔案提供。

檔案的第 1 行多重集 s 中元素個數 n;接下來的 n 行中,每行有乙個自然數。

程式執行結束時,將計算結果輸出到檔案 output.txt 中。輸出檔案有 2 行,第 1 行給

出眾數,第 2 行是重數。

612

2235

2

3

考慮了有多個眾數的情況,全部輸出

#include

using

namespace std;

struct stu stu[

100]

;int p=0;

/*一組資料中,眾數可以有乙個或多個,這個時候需要全部記錄下來

建立結構體陣列的目的就是為了記錄眾數

*/int

main()

; cout<<

"輸入全部數字:\n"

;for

(int i=

0; i)int max=0;

for(

int i=

0; ifor(

int i=

0; i) cout<.n<<

" : "

<.num

}

眾數問題(分治法解決)

#include

using

namespace std;

int n;

int num=

0,v;

//全域性變數,表示眾數的個數和眾數

int a[

999]

;//儲存資料

void

fun(

int left,

int right)

// i-left+1 中位數左邊還有多少數字 如果大於num 則眾數可能位於左邊

if(i-left+

1>num)

fun(left,i)

;// right-j+1 中位數右邊還有多少數字 同上

if(right-j+

1>num)

fun(j,right);}

intmain()

sort

(a,a+n)

;//排序

fun(

0,n-1)

;//傳遞的引數是陣列下標

cout<" : "

}

分治演算法 眾數問題

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

眾數問題 分治演算法

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

分治演算法解決眾數問題

題目 給定含有n個元素的多重集合s,每個元素在s 現的次數稱為該元素的重數。多重集s中重數最大的元素稱為眾數,如s 多重集s的眾數是2,其重數為3。分析 include using namespace std define m 100 int a m int num,val,n 重數,眾數,個數 v...