Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/131.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.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++中如何找到数组的中间“N”元素?例如,如果n=3,且数组为[0,1,5,7,7,8,10,14,20],则中间为[7,7,8]_C++_Arrays - Fatal编程技术网

从数组中查找中间元素 C++中如何找到数组的中间“N”元素?例如,如果n=3,且数组为[0,1,5,7,7,8,10,14,20],则中间为[7,7,8]

从数组中查找中间元素 C++中如何找到数组的中间“N”元素?例如,如果n=3,且数组为[0,1,5,7,7,8,10,14,20],则中间为[7,7,8],c++,arrays,C++,Arrays,p、 在我的上下文中,n和数组的元素是奇数,所以我可以找到中间。 谢谢 好吧,如果你必须选择n数字,你知道会有size-n未选择的项目。当你想在中间选择数字时,你希望在数组的每一边都有“未选中”的数字,即(size -n)/2 我不会做你的家庭作业,但我希望这会有帮助。好吧,如果你必须选择n数字,你知道会有size-n未勾选的项目。当你想在中间选择数字时,你希望在数组的每一边都有“未选中”的数字,即(size -n)/2 我不会做你的家庭作业,但我希望这会有所帮助。这很快,没有经过测试,但基

p、 在我的上下文中,n和数组的元素是奇数,所以我可以找到中间。
谢谢

好吧,如果你必须选择
n
数字,你知道会有
size-n
未选择的项目。当你想在中间选择数字时,你希望在数组的每一边都有“未选中”的数字,即<代码>(size -n)/2
我不会做你的家庭作业,但我希望这会有帮助。

好吧,如果你必须选择
n
数字,你知道会有
size-n
未勾选的项目。当你想在中间选择数字时,你希望在数组的每一边都有“未选中”的数字,即<代码>(size -n)/2
我不会做你的家庭作业,但我希望这会有所帮助。

这很快,没有经过测试,但基本思想

const int n = 5;

// Get middle index
int arrLength = sizeof(myArray) / sizeof(int);

int middleIndex = (arrLength - 1) / 2;
// Get sides
int side = (n - 1) / 2;

int count = 0;

int myNewArray[n];

for(int i = middleIndex - side; i <= middleIndex + side; i++){
     myNewArray[count++] = myArray[i];
}
const int n=5;
//获取中间索引
int arrLength=sizeof(myArray)/sizeof(int);
int middleIndex=(arrLength-1)/2;
//偏袒
内端=(n-1)/2;
整数计数=0;
int myNewArray[n];

对于(inti=middleIndex-side;i这很快,没有经过测试,但基本思想

const int n = 5;

// Get middle index
int arrLength = sizeof(myArray) / sizeof(int);

int middleIndex = (arrLength - 1) / 2;
// Get sides
int side = (n - 1) / 2;

int count = 0;

int myNewArray[n];

for(int i = middleIndex - side; i <= middleIndex + side; i++){
     myNewArray[count++] = myArray[i];
}
const int n=5;
//获取中间索引
int arrLength=sizeof(myArray)/sizeof(int);
int middleIndex=(arrLength-1)/2;
//偏袒
内端=(n-1)/2;
整数计数=0;
int myNewArray[n];

对于(inti=middleIndex-side;i那么,朴素算法如下:

  • 找到中间,因为指定长度为奇数,所以中间存在
  • 重复选择左侧的一个元素和右侧的一个元素。您始终可以这样做,因为您指定
    n
    是奇数
  • 您还可以进行以下观察:


    请注意,在选择中间元素后,还有
    n-1
    元素需要选择。这是一个偶数,
    (n-1)/2
    必须来自中间元素的左侧,
    (n-1)/2
    必须来自右侧。中间元素具有索引
    (长度-1)/2
    。因此,所选第一个元素的较低索引为
    (length-1)/2-(n-1)/2
    ,最后一个元素的较高索引为
    (length-1)/2+(n-1)/2
    。因此,所需索引为
    (length-n)/2-1
    (length+n)/2-1

    好吧,朴素的算法如下:

    int values[] = {0,1,2,3,4,5,6,7,8};
    const size_t total(sizeof(values) / sizeof(int));
    const size_t needed(3);
    
    vector<int> middle(needed);
    std::copy(values + ((total - needed) / 2), 
        values + ((total + needed) / 2), middle.begin());
    
  • 找到中间,因为指定长度为奇数,所以中间存在
  • 重复选择左侧的一个元素和右侧的一个元素。您始终可以这样做,因为您指定
    n
    是奇数
  • 您还可以进行以下观察:

    请注意,在选择中间元素后,还有
    n-1
    元素需要选择。这是一个偶数,
    (n-1)/2
    必须来自中间元素的左侧,
    (n-1)/2
    必须来自右侧。中间元素具有索引
    (长度-1)/2
    。因此,所选第一个元素的较低索引为
    (length-1)/2-(n-1)/2
    ,而所选最后一个元素的较高索引为
    (length-1)/2+(n-1)/2
    。因此,所需的索引为
    (length-n)/2-1至
    (length+n)/2-1
    int-values[]{0,1,2,3,4,5,6,7,8};
    
    int values[] = {0,1,2,3,4,5,6,7,8};
    const size_t total(sizeof(values) / sizeof(int));
    const size_t needed(3);
    
    vector<int> middle(needed);
    std::copy(values + ((total - needed) / 2), 
        values + ((total + needed) / 2), middle.begin());
    
    const size_t total(sizeof(values)/sizeof(int)); 需要的常数大小(3); 媒介中间(需要); 标准::复制(值+((总数-需要)/2), 值+((总数+所需)/2),中间的.begin();
    没有检查所有可能的边界条件。根据需要,使用示例数据,我得到
    middle=(3,4,5)

    int-values[]={0,1,2,3,4,5,6,7,8};
    const size_t total(sizeof(values)/sizeof(int));
    需要的常数大小(3);
    媒介中间(需要);
    标准::复制(值+((总数-需要)/2),
    值+((总数+所需)/2),中间的.begin();
    

    我没有用所有可能的边界条件来检查这一点。用样本数据我得到
    middle=(3,4,5)

    >按要求。

    到目前为止你的方法是什么?请告诉我们你需要什么帮助,而不是要求我们为你做。不,我正在做数字图像处理应用程序。C++中有什么功能吗?是数组总是排序的,如例子中的那样,那么只从中间取子数组。如果没有,那么在示例中拖动元素。le,这很清楚。不,你必须编写自己的函数来实现这一点,但我发现有点难以相信正在编写图像处理应用程序的人自己无法解决这个问题。到目前为止,你的方法是什么?向我们展示你需要什么帮助,而不是让我们为你做。不,我正在处理数字图像处理应用程序。C++中有函数吗?数组总是排序的,如例子中的那样,那么从中间取子数组。如果没有,那么在示例中拖动元素,这样就很清楚了。不,你必须编写自己的函数,NHF,但是我觉得有点难以相信有人在写图像处理。应用程序无法自行解决此问题。