【深基4.例3】分类平均

题目描述

给定

n

n

n 和

k

k

k,将从 1 到

n

n

n 之间的所有正整数可以分为两类:A 类数可以被

k

k

k 整除(也就是说是

k

k

k 的倍数),而 B 类数不能。请输出这两类数的平均数,精确到小数点后

1

1

1 位,用空格隔开。

数据保证两类数的个数都不会是

0

0

0。

输入格式

输入两个正整数

n

n

n 与

k

k

k。

输出格式

输出一行,两个实数,分别表示 A 类数与 B 类数的平均数。精确到小数点后一位。

样例 #1

样例输入 #1

100 16

样例输出 #1

56.0 50.1

提示

数据保证,

1

n

10000

1 \leq n\leq 10000

1≤n≤10000,

1

k

100

1 \leq k \leq 100

1≤k≤100。

博客食用更佳~

水题,就是个水题,没有任何思维难度,代码量也不大的一道题,本文适合任何新手

思路:

先说一下,平均数就是是指在一组数据中所有数据之和再除以这组数据的个数 (来自百度百科)

↑ 上面那句其实是废话

那怎么算出和呢?让 iii 从一开始枚举,如果能被 kkk 整除,那和就加上 iii

for (int i = 1; i <= n; i++) {

if (i % k == 0)

sum += i;

}

但是,这样是极其浪费时间的,我们要珍惜时间!一寸光……(咳咳,走错片场了)

其实可以从 kkk 开始枚举,每循环一次,i+=ki += ki+=k

for (int i = k; i <= n; i += k)

sum += i;

不能被 kkk 整除的,直接用等差数列求和(也可以用这个求能被 kkk 整除的数的和)减去能被 kkk 整除的和即可

那么这组数据的个数又怎么求呢,这甚至不用循环!(zyx

能被 kkk 整除的,直接 nk\dfrac{n}{k}kn​ 即可,不能被 kkk 整除的,可以用总数减去能被 kkk 整除的个数,也就是 n−nkn - \dfrac{n}{k}n−kn​

这样这道题就已经解出来了,直接上代码

#include

#include

using namespace std;

int n,k,cnt1=0,cnt2=0;//cnt1和cnt2是计数器,n和k如题目所述

double ans1,ans2,sum1,sum2;//ans1是A类数的答案,ans2是B类数的答案。sum1是A类数的和,sum2是B类数的和。

int main(){

cin>>n;

cin>>k;

for(int i=1;i<=n;i++){

if(i%k==0){//如果能除尽k

sum1+=i;//计入A类数的和中

cnt1++;//A类数计数器++

}else{

sum2+=i;//计入B类数的和中

cnt2++;//B类数计数器++

}

}

ans1=sum1/cnt1;//求出答案

ans2=sum2/cnt2;

printf("%.1lf %.1lf",ans1,ans2);//输出,记得保留1位小数

return 0;//拜拜!

}

参考链接

评论可见,请评论后查看内容,谢谢!!!评论后请刷新页面。

大家都在找:

分类:分类垃圾桶

数据挖掘:数据挖掘论文

c++:彩票查询

数据结构:数据结构是干什么的

算法:算法备案

开发语言:小程序开发语言

排序算法:排序算法c语言

大家都在看: