Code bị lỗi "terminate called after throwing an instance"

Mọi người xem giúp em bài này với ạ, em code, lúc chạy ct ra lỗi như thế này, em không biết sửa ntn, mong mọi người giúp đỡ.


#include<iostream>
#include <vector>
using namespace std;
int main(void)
{
    long x,Tong=0,tich1,tich2,N,X,i, m, n;
    vector<long> v;
    v.reserve(N);
    cin>>N;
    for( i=0; i<N; i++)
    {   cin>>x;
        v.push_back(x);
    }
    tich1=v[0]*v[1];
    tich2=v[0]*v[1];
    for (i=0; i<N; i++)
    {
        X=v[i]*v[i+1];
        if(X>tich1)
        {
            tich1=X;
            m=i;
        }
    }
   v.erase(v.begin() + m, v.begin() + m+1);
    for ( i=0; i<N-2; i++)
    {
        X=v[i]*v[i+1];
        if(X>tich2)
        {
            tich2=X;
            n=i;
        }
    }
    v.erase(v.begin() + n, v.begin() + n+1);
    Tong=tich1+tich2;
    for (i=0;i<N-4;i++)
    Tong+=v[i];
    cout<<Tong;
    return 0;
}
1 Like

Không liên quan đến lỗi nhưng biến N chưa được khởi tạo kìa bạn.

1 Like

Lỗi này có thể do bạn truy xuất vượt quá số phần tử của vector.
Bạn nên gọi v.reverse(N); sau khi nhập N (cin >> N;).

Tính ra thì theo bài này, chỉ dùng phép cộng với số 1 thôi, các số còn lại dùng phép nhân là xong.

7 Likes

Lỗi ở chỗ truy cập v[i+1]i < N.

Bài này lấy 2 số là \Delta_{max} = v_i v_{i+1} - v_i - v_{i+1}. Nếu lớn hơn max thứ i thì dồn ra sau 1 ô rồi gán vào.

2 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?