P5719 【深基4.例3】分类平均
#include<bits/stdc++.h>
using namespace std;
int main(){
int sum = 0;
int n,k;
cin >> n >> k;
double a,b;
for(int i = 0;i <= n;i ++){
if(i % k == 0){
sum += i;
}
}
a = sum / (n / k);
sum = (1 + n) * n / 2 - sum;
b = sum / (n - n / k);
cout << fixed << setprecision(1) << a << " " << b;
return 0;
}
由于你的 sum,n,k 都是 int ,所以 a、b 会被强制转换成 int ,只要在sum前面加上 *1.0 就ok了
代码:
#include<bits/stdc++.h>
using namespace std;
int main(){
int sum = 0;
int n, k;
cin >> n >> k;
double a, b;
for(int i = 0; i <= n; i ++){
if(i % k == 0){
sum += i;
}
}
a = sum * 1.0 / (n / k);
sum = (1 + n) * n / 2 - sum;
b = sum * 1.0 / (n - n / k);
cout << fixed << setprecision(1) << a << " " << b;
return 0;
}
因为a,b和sum的计算结果,都是用整数计算数来的,其小数部分会被忽略,在计算中转换下类型;
然后再将计算a和b的地方修改下即可。
修改如下:
参考链接:
#include<bits/stdc++.h>
using namespace std;
// https://www.luogu.com.cn/problem/P5719
int main(){
int sum = 0;
int n,k;
int knum=0; // 记录可以整除k的数的个数,初始赋值为0
cin >> n >> k;
double a,b;
for(int i = 1;i <= n;i ++){
// 如果可以被区间[1,n]的数整除
// 则将这个数累加到和sum中
// 并且将可以整除的数量+1
if(i % k == 0){
sum += i;
knum++;
}
}
// 可以整除的数的平均数a 为 其和sum 除以 对应的数量knum
// sum乘以1.0,将整数转为double类型计算,以保留小数部分
a = sum*1.0 / knum;
// https://zhidao.baidu.com/question/2274445572254343388.html
// 不可以整除的数的平均值 为 1到n所有数的和 减去 可以整除的数的和sum 的差值, 除以 其数量
// 同上,乘以1.0,将整数转为double类型计算,以保留小数部分
b = ((n*1+n*(n-1)*1.0/2)-sum)/(n-knum);
cout << fixed << setprecision(1) << a << " " << b;
return 0;
}
输入 #1复制
5 3 4 5 6 7
输出 #1复制
3 5 7
方法一:数组运算
#include<stdio.h>
#include<math.h>
int main()
{
int n;
scanf("%d",&n);
int a[n];
int i,j;
for(i=0;i<n;i++){
scanf("%d",&a[i]);
}
for(i=0;i<n;i++){
int k=1;
for(j=2;j<=sqrt(a[i]);j++){
if(a[i]%j==0){
k=0;
break;
}
}
if(k==1&&a[i]!=1){//注意排除1的情况
printf("%d ",a[i]);
}
}
return 0;
}
方法二:函数运算
#include<stdio.h>
#include<math.h>
int search(int n)
{
int i,k=1;
for(i=2;i<=sqrt(n);i++){
if(n%i==0){
k=0;
break;
}
}
if(k==1&&n!=1){
return n;
}
else{
return 0;
}
}
int main()
{
int n,m;
scanf("%d",&n);
int i=1;
while(i<=n){
scanf("%d",&m);
int k=search(m);
if(k!=0){
printf("%d ",k);
}
i++;
}
return 0;
}
方法三:函数+数组运算
#include<stdio.h>
#include<math.h>
int search(int n)
{
int i,k=1;
for(i=2;i<=sqrt(n);i++){
if(n%i==0){
k=0;
break;
}
}
if(k==1&&n!=1){
return n;
}
else{
return 0;
}
}
int main()
{
int n;
scanf("%d",&n);
int a[n];
int i,j;
for(i=0;i<n;i++){
scanf("%d",&a[i]);
}
int k;
for(i=0;i<n;i++){
k=search(a[i]);
if(k!=0){
printf("%d ",k);
}
}
return 0;
}