【问题标题】:Average of an Array should be less than or equal to k数组的平均值应小于或等于 k
【发布时间】:2021-09-21 09:07:28
【问题描述】:

给定一个数组,我们必须取一个数组的平均值,然后取该平均值的下限,该值应小于 k。 本题链接:-https://www.hackerearth.com/practice/data-structures/arrays/1-d/practice-problems/algorithm/minimum-additions-0142ac80/

我的密码:-

#include "bits/stdc++.h"
using namespace std;

int main() {
    int t;
    cin>>t;
    while(t--){
        int n,k;
        cin>>n>>k;
        int arr[n];
        int s = 0;
        for(int i=0;i<n;i++){
            cin>>arr[i];
            s += arr[i];
        }

        int ans;

        if(floor(s/n)<=k){
            cout<<0<<endl;
        }      
        else{
            cout<<floor( s/(k+1) - n + 1 )<<endl;
        }
    }
    return 0;
}
  

在我的代码层功能无法正常工作时,它通过了小测试用例,但是当它为大型测试用例运行时却失败了。在讨论中,有些人正在使用 (sum/n) 和 ll int result=sum/(k+1)-n+1; 及其所有测试案例通过。

我们也可以使用 floor 函数执行此操作,但 floor 函数在我的代码中无法正常工作。

谁能帮助我的代码并告诉我为什么 floor 函数在我的代码中不起作用以及为什么我们在代码中使用 k+1 和 n+1 我们可以使用任何不同的逻辑以不同的方式执行此操作吗?

【问题讨论】:

  • 请不要使用所谓的“竞赛”或“在线评判”网站来学习 C++ 或一般编程。这不是他们真正的目的。许多例子倾向于使用非常坏的习惯,这些习惯会让你几乎失业。不幸的是,这段代码显示了许多这些坏习惯。一种实际上使代码无效的 C++。如果您认真学习编程和 C++,请投资some good books 并上课。
  • "给定一个数组,我们必须取一个数组的平均值,然后取该平均值的下限,该值应小于 k。"这不是任务要求你的代码做的事情
  • 使浮点类型的分区。
  • 顺便说一句,您根本不需要数组(或者更好的是std::vector),因为您实际上不需要存储每个元素,只需阅读它并添加到总和中。

标签: c++ average addition minimum floor


【解决方案1】:
int n; // non const
int arr[n]; // bad

不要使用 VLA。在需要可变长度的情况下考虑使用向量。

问题约束指定值最大为1e9。所以最大2e5 (length of array) * 1e9 将溢出一个 32 位整数。使用int64_t 代替求和。
在这里使用 floor 也是多余的。整数值被隐式向下舍入。所以你可以完全发射地板。

【讨论】:

  • 对不起,我没有得到你的答案。所以你是说我应该从我的代码中将我的数组转换为向量和远程楼层函数?您能否解释一下为什么我们使用 sum/(k+1) -n+1,我无法理解为什么我们使用 this 而不是 floor 函数?请解释一下。
猜你喜欢
  • 2012-11-08
  • 2017-03-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-26
  • 2021-06-04
  • 1970-01-01
相关资源
最近更新 更多