Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 检查哪一个模块最接近_C++_Arrays_Loops - Fatal编程技术网

C++ 检查哪一个模块最接近

C++ 检查哪一个模块最接近,c++,arrays,loops,C++,Arrays,Loops,欢迎光临。我的问题是,我已经给出了一个数字数组,我需要它来计算平均值(我做的那部分),但是我必须找到数组元素(模块),它更接近平均值。下面粘贴代码(main()的一种形式) #包括 使用名称空间std; 双*平均值(双*arr、大小\u t大小、双*平均值){ 重复计数; 对于(int p=0;p

欢迎光临。我的问题是,我已经给出了一个数字数组,我需要它来计算平均值(我做的那部分),但是我必须找到数组元素(模块),它更接近平均值。下面粘贴代码(main()的一种形式)

#包括
使用名称空间std;
双*平均值(双*arr、大小\u t大小、双*平均值){
重复计数;
对于(int p=0;pcout该算法基于这样一个事实,即
std::map
保持其元素的排序(使用
operatorsecond;//一个新的
}

好吧,这不是你问题的答案,因为你已经有了两个

试试新的怎么样

使用,并实现相同的目标

#include<algorithm>
//...
struct comp
{
    double avg;
    comp(double x):avg(x){}

    bool operator()(const double &x) const
    {
        return x < avg;
    }   
};

std::sort(arr,arr+size);
average =std::accumulate(arr, arr+size, 0.0) / size;
double *p= std::partition(arr, arr+size, comp(average));

std::cout<<"Average :"<<average <<" Closest : "<<*p<<std::endl;
#包括
//...
结构组件
{
双平均值;
comp(双x):平均值(x){}
布尔运算符()
{
返回x因为每个人都在给孩子们做作业

#include <iostream>
using namespace std;

double min(double first, double second){
  return first < second ? first : second;
}

double abs(double first){
  return 0 < first ? first : -first;
}


double* aver(double* arr, size_t size, double& average){

    double count;
    for(int p = 0; p < size; p++)
      count += arr[p];

    average = count/size;

    int closest_index = 0;
    for(int p = 0; p < size; p++)
      if( abs(arr[p] - average) < 
          abs(arr[closest_index] - average) )
        closest_index = p;

    return &arr[closest_index];
}

int main() { 
    double arr[] = {1,2,3,4,5,7}; 
    size_t size = sizeof(arr)/sizeof(arr[0]); 
    double average = 0; 
    double* p = aver(arr,size,average); 
    cout << *p << " " << average << endl; 
    //Above ^^ gives the expected behavior, 
    //Without it you'll get nothing but random memory
}
#包括
使用名称空间std;
双分钟(双第一,双第二){
返回第一个<第二个?第一个:第二个;
}
双abs(双优先){
返回0CUT不这样做,它给出了(错误的)印象:<<代码> AVER <代码> >  > <代码>是循环的一部分。即使空白对C++编译器没有意义,它对人类来说也是如此。对我来说,它看起来像是基本的算术。平均值最接近于你所建议的4;为什么?因为(4 -你的平均值)<(你的平均值-3)。“*我不知道如何检查哪个元素离另一个元素最近,并将其替换为p”想一想。如果你想成为一名程序员,你必须弄清楚这样的事情。正如@syam所说,你应该正确地使用你的代码。即使允许使用单行for,while,If不带括号,也不要使用它们。始终使用带圆括号的版本。设置平均值的代码过于复杂很复杂,你不需要为此创建另一个指针,它可以在一行中完成。谢谢你的想法!我知道如何找出哪个数字最接近模,但我在理解指针方面仍然有困难。你能告诉我如何减少它吗?非常感谢你的帮助,但我无法更改main()和double*aver结构中的任何内容(double*arr,size\u t size,double&average){我只能处理这部分}@Daniel Zawadzki,所以将这段代码移动到你的函数中,你已经计算了所有需要的内容,只需在你的函数中创建这个映射,执行这个循环,然后返回扰动。begin()->second;
#include<algorithm>
//...
struct comp
{
    double avg;
    comp(double x):avg(x){}

    bool operator()(const double &x) const
    {
        return x < avg;
    }   
};

std::sort(arr,arr+size);
average =std::accumulate(arr, arr+size, 0.0) / size;
double *p= std::partition(arr, arr+size, comp(average));

std::cout<<"Average :"<<average <<" Closest : "<<*p<<std::endl;
#include <iostream>
using namespace std;

double min(double first, double second){
  return first < second ? first : second;
}

double abs(double first){
  return 0 < first ? first : -first;
}


double* aver(double* arr, size_t size, double& average){

    double count;
    for(int p = 0; p < size; p++)
      count += arr[p];

    average = count/size;

    int closest_index = 0;
    for(int p = 0; p < size; p++)
      if( abs(arr[p] - average) < 
          abs(arr[closest_index] - average) )
        closest_index = p;

    return &arr[closest_index];
}

int main() { 
    double arr[] = {1,2,3,4,5,7}; 
    size_t size = sizeof(arr)/sizeof(arr[0]); 
    double average = 0; 
    double* p = aver(arr,size,average); 
    cout << *p << " " << average << endl; 
    //Above ^^ gives the expected behavior, 
    //Without it you'll get nothing but random memory
}