只有一个正确解决方案的无限循环

Infinite loop with only one correct solution

本文关键字:无限循环 解决方案 有一个      更新时间:2023-10-16
当我

输入值> 3 时,代码在无限循环上运行。

还仅显示输入的两个正确解决方案中的一个,以防输入arr = [1,0,3,4]

解决方案应该是:{1,3}{0,4}

void find_sum (){
    int i , j , k, *arr, size , target;
    cout << "Enter size of array" <<endl;
    cin >> size;
    arr = new int[size];
    cout << "Enter array elements " << endl;
    for( k = 0 ; k < size ; k++){
        cin >> arr[k];
    }
    cout << "Enter your target " << endl;
    cin >> target;
    i = 0 ;
    j = size - 1;
    while (i < j ){
        if(arr[i] + arr[j] == target )
            cout << "Solution :" << arr[i] <<" " << arr[j] <<endl;
        if ( arr[i] + arr[j] < target )
            i++;
        if (arr[i] + arr[j] > target )
            j--;
    }
}
int main()
{
    find_sum();
    return 0;
}

似乎您假设数组arr已排序,因为每次测试解决方案并且总和太低时,您都会增加i。这相当于获取列表中的下一个元素,假设它更大。

如果 ( arr[i] + arr[j]

此外,如果总和等于目标,则输出解决方案,但永远不会更改ij。它们保持不变,循环继续。这就是为什么你只有一个解决方案。但请注意,在i超过数组大小或小于 0 j后,代码将崩溃。您应该将此条件添加到 while 循环中。