題解 P5719 深基4 例3 分類平均

2022-09-03 21:09:18 字數 795 閱讀 9651

之前的 \(\latex\) 有點崩了,修改一下。

這題大家可能第一下想到的方法就是列舉 \(1\) 到 \(n\),逐一判斷這些數是否為 \(k\) 的倍數,這種做法的時間複雜度為: \(\theta(n)\)。

其實還有一種做法是列舉小於 \(n\) 的 \(k\) 的倍數,求出它們的和,即為 a 集合;再用總和減去 a 集合元素的和,即為 b 集合。當 \(k\leq n\) 時,此方法的時間複雜度為: \(\theta(\lfloor\frac\rfloor)\)。總和的話用等差數列求和公式就行了。

至於 \(k>n\),那麼 a 集合的元素和就是 \(0\),b 集合的元素和就是總和。

#includeusing namespace std;

int n,k,sum; //sum 為小於 n 的 k 的倍數的數量。

double a1,a2;

int main()

for(register int i=1;i*k<=n;i++) //集合 a 的元素和。

a1+=i*k,sum++;

a2=(1+n)*n/2; //集合 b 的元素和。

a2-=a1;

a1/=sum; //求平均。

a2/=n-sum;

printf("%.1lf %.1lf",a1,a2);

return 0;

}

ps:如果您不知道何為等差數列求和公式(廢話,xxs 都知道),請看這裡:

\[\sum^n_=\frac

\]

洛谷 P5719 深基4 例3 分類平均

題目描述 給定n n 10000 和k k 100 將從 1 到 n 之間的所有正整數可以分為兩類 a 類數可以被 k 整除 也就是說是 k 的倍數 而 b 類數不能。請輸出這兩類數的平均數,精確到小數點後 1 位,用空格隔開。資料保證兩類數的個數都不會是 0。輸入格式 無輸出格式 無輸入輸出樣例 ...

P5723 深基4 例13 質數口袋

先用乙個陣列來存放素數,然後統計和計算 include using namespace std int l,cnt,sum int a 100005 intisprime int n return n int main int i 0 while 1 else break for int i 0 i...

P5714 深基3 例7 肥胖問題

bmi 指數是國際上常用的衡量人體胖瘦程度的乙個標準,其演算法是 m h 2 40 m 120,1.4 h 2.0 其中 m 是指體重 千克 h 是指身高 公尺 不同體型範圍與判定結果如下 現在給出體重和身高資料,需要根據 bmi 指數判斷體型狀態並輸出對應的判斷。對於非 c 語言,在輸出時,請四捨...