首页 > 试题广场 >

数列均值

[编程题]数列均值
  • 热度指数:834 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
一个数列里有若干个 ,假设现在  的个数分别是 ,请问至少要有多少个  才能使数列四舍五入后的平均值不小于 

输入描述:

输入包含三行数据

第一行包含一个非负的整数 ,表示数列中  的个数

第二行包含一个非负的整数 ,表示数列中  的个数

第三行包含一个非负的整数 ,表示数列中  的个数



输出描述:
在一行中输出数列中至少有几个  才能使数列四舍五入后的平均值不小于 
示例1

输入

2
0
0

输出

2

说明

 四舍五入后为 
示例2

输入

0
15
0

输出

5

说明


 四舍五入后为 
import math
a,b,c = int(input()),int(input()),int(input())
x = math.ceil(a+(b-c)/3)
print(x)

发表于 2022-03-24 22:30:30 回复(0)
如果均值本来就不小于4了,直接输出0
否则设5有x个,列出不等式:
计算得到:
,其中x按浮点数向上取整。
import java.io.*;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        long a = Long.parseLong(br.readLine());
        long b = Long.parseLong(br.readLine());
        long c = Long.parseLong(br.readLine());
        if((2*a + 3*b + 4*c) / (a + b + c*1.0) >= 4){
            System.out.println(0);
        }else{
            long x = (long)Math.ceil(a + (b - c) / 3.0);
            System.out.println(x);
        }
    }
}

编辑于 2022-01-21 09:59:07 回复(0)
a = int(input())
b = int(input())
c = int(input())
if (3*a+b-c)/3<0:
    print(0)
elif (3*a+b-c)%3==0:
    print(int(((3*a+b-c)/3)))
else:
    print(int((3*a+b-c)/3)+1)
发表于 2021-09-03 22:11:45 回复(2)
令当前有x个5,那么我们知道 
2a + 3b + 4c +5x / a + b + c + x >= 3.5 ==> 1.5x>= 1.5a + 0.5b - 0.5c

==> 3x >= 3a + b - c

为什么要这样做,而不是变成x >= a + 1/3b - 1/3c呢?因为 c++精度是有限的,如果这样算的话,浮点数的精度可能会给你造成很多判断上的问题,会加重负担。比如 const double plus = 1/3,
你在编译器中可以看到大概是0.333....,但是 2*plus就变成了 0.666...67,这样的话精度就会出问题,可能在一些比较刁钻的角度会报错。
由上除法运算是能少则少


#include <iostream>
using namespace std;
int main() {
    long long a = 0, b = 0, c = 0;
    while (cin >> a >> b >> c) {
        long long result = 0;
        result = (3 * a + b - c) / 3;
        if ((3 * a + b - c) %3 > 0)  {
            result++;
        }
        if (result < 0) {
            result = 0;
        }
        cout << (result);
    }
}
发表于 2023-03-10 09:29:47 回复(0)
#include <iostream>
using namespace std;
int t2()
{
    long int a,b,c;

    cin >> a;
    cin >> b;
    cin >> c;
    long int t = 3 * a + b - c;
    if (t < 0)
    {
        cout << 0 << endl;
    }
    else if (t % 3 == 0)
    {
        cout << t / 3 << endl;
    }
    else
        cout << t / 3 + 1 << endl;

    return 0;
}

int main()
{
    

    t2();
    

}
发表于 2021-09-07 14:52:12 回复(0)
### 思路
利用公式,要求平均值四舍五入为4,我们只要满足平均值大于3.5即可,即下式:
移项可得:


### 代码
import java.util.*;
 
public class Main{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        long a = sc.nextLong();
        long b = sc.nextLong();
        long c = sc.nextLong();
        long x = Math.max((long)Math.ceil(1.0 * (3 * a + b - c) / 3), 0L);
        System.out.println(x);
    }
}


发表于 2021-08-14 17:44:51 回复(0)