n 個人 m 隊中對數的最大值和最小值
問題陳述
競賽中的N名參與者以某種方式分成M支隊伍,因此每隊至少有一名參與者。比賽結束後,來自同一隊的每兩名參與者都成為了朋友。
你的任務是編寫一個程式,找出比賽結束時可能形成的朋友對數的最大值和最小值。
演算法
1. We can obtain max pairs using below formula: maxPairs = ((n – m) * (n – m + 1)) / 2 2. We can obtain min pairs using below formula: minPairs = m * (((n - m) / m + 1) * ((n - m) / m)) / 2 + ceil((n - m) / double(m)) * ((n - m) % m);
示例
#include <iostream> #include <cmath> using namespace std; void getPairs(int n, int m){ int maxPairs = ((n - m + 1) * (n - m)) / 2; int minPairs = m * (((n - m) / m + 1) * ((n - m) / m)) / 2 + ceil((n - m) / double(m)) * ((n - m) % m); cout << "Minimum pairs = " << minPairs << "\n"; cout << "Maximum pairs = " << maxPairs << "\n"; } int main(){ getPairs(3, 2); return 0; }
輸出
編譯並執行上述程式後,就會生成以下輸出−
Minimum pairs = 1 Maximum pairs = 1
廣告