之前的 \(\latex\) 有點崩了,修改一下。
這題大家可能第一下想到的方法就是列舉 \(1\) 到 \(n\),逐一判斷這些數是否為 \(k\) 的倍數,這種做法的時間複雜度為: \(\theta(n)\)。
其實還有一種做法是列舉小於 \(n\) 的 \(k\) 的倍數,求出它們的和,即為 a 集合;再用總和減去 a 集合元素的和,即為 b 集合。當 \(k\leq n\) 時,此方法的時間複雜度為: \(\theta(\lfloor\frac\rfloor)\)。總和的話用等差數列求和公式就行了。
至於 \(k>n\),那麼 a 集合的元素和就是 \(0\),b 集合的元素和就是總和。
ps:如果您不知道何為等差數列求和公式(廢話,xxs 都知道),請看這裡:#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;
}
\[\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 語言,在輸出時,請四捨...