数组平衡指数的典型误差

Typical errors in equilibrium index of an array

本文关键字:典型 误差 指数 平衡 数组      更新时间:2023-10-16

作为面试的实际测试,我写了一个程序来查找数组的平衡点(索引(,基本上它将返回索引 o 元素,该元素的元素右边的元素之和等于他左边的元素之和。该程序运行良好,但是我需要一些想法(测试单元(来使该程序崩溃,以呈现可能的错误。

这是我的代码:

#include <iostream>
using namespace std;
int getIndex(int array[], int size)
{
    int totalSum = 0;
    for (int i = 0; i < size; i++)
    {
        totalSum += array[i];
    }
    int leftSum = 0;
    int rightSum = 0;
    for (int i = 0; i < size; i++)
    {
        rightSum = totalSum - (leftSum + array[i]);
        if (leftSum == rightSum)
        {
            return i;
        }
        leftSum += array[i];
    }
    return -1;
}
int main()
{
    cout << "Number of elements: " << endl;
    int index;
    cin >> index;
    int inputIndex = index - 1;
    int arr[inputIndex];
    for (int i = 0; i <= inputIndex; ++i)
    {
        cout << "Element " << i << endl;
        cin >> arr[i];
    }
    int result = getIndex(arr, index);
    if (result == -1)
    {
        cout << "Equilibrium index doesn't exist" << endl;
    }
    else
    {
        cout << "Your index is: " << result << endl;
    }
    return 0;
}

例如,这些是我作为输入给出的一些值:

元件数量:4元素 0: 1
元素 1: 0
元素 2: 0
元素3:1

输出:您的指数是:1

原因是您声明了大小为 (index - 1( 的 "arr" 变量(在模拟中等于 3(。因此,您只创建了一个包含 3 个元素的数组。而且,您的"arr"变量是一个动态数组。因此,您应该尝试这样做:

cout << "Number of elements: " << endl;
int index;
cin >> index;
int* arr = (int*)malloc(sizeof(int)*index); //initialize arr
for (int i = 0; i < index; ++i)
{
    cout << "Element " << i << endl;
    cin >> arr[i];
}
// Add your code that you wanna work with arr array in here
free(arr);