Thắc mắc lệnh if không hoạt động

Đề trên codelearn.
image

        if (i!=0&&i!=arr.size()-1) {
           a = true;  
           for (int j = i-1; j>=0;j--) {
               sumxuoi+= arr[j]; 
           } 
           for (int k = i+1; k <arr.size(); k++) { 
                sumnguoc += arr[k]; 
           }
        }
       
        cout << boolalpha; 
           if (sumxuoi==sumnguoc&&a) {
           	cout << "\n" << a;
           	cout << "\n" << i;
			cout << endl;  
           	cout << sumxuoi << " " << sumnguoc << " "; 
		   } 
    }
  • Bộ test là mảng arr {1,2,3}
  • Cho em hỏi phần này của đoạn code của em thì tại sao i ==2 == arr.size() - 1 compliler vẫn cho vô lệnh if ạ ? Trong khi em đã if (i!= arr.size() -1&&i!=0) rồi ạ?
#include <iostream>
#include <vector>
using namespace std;
void beautifulArray(std::vector<int> arr)
{
    //if (arr.size()<=2) return false; 
    for (int i = 0; i  < arr.size();i++) {
        int sumnguoc = 0; 
        int sumxuoi = 0;
        bool a; 
        if (i!=0&&i!=arr.size()-1) {
           a = true;  
           for (int j = i-1; j>=0;j--) {
               sumxuoi+= arr[j]; 
           } 
           for (int k = i+1; k <arr.size(); k++) { 
                sumnguoc += arr[k]; 
           }
        }
       
        cout << boolalpha; 
           if (sumxuoi==sumnguoc&&a) {
           	cout << "\n" << a;
           	cout << "\n" << i;
			cout << endl;  
           	cout << sumxuoi << " " << sumnguoc << " "; 
		   } 
    }
}
int main () { 
int sl; 
    cout << "nhap so luong phan tu: "; 
    cin >> sl; 
    vector <int> a (sl); 
    for (int i = 0 ; i < a.size(); i ++) { 
       cin >> a[i]; 
	}
	beautifulArray (a); 
	system ("pause"); 
  return 0; 
}

Mọi người giải thích cho em với em cảm ơn.

Nếu bạn không if như vậy thì chỗ j, k có khả năng vượt ra ngoài mảng, sẽ báo lỗi. Nếu bạn cho rằng if đó là thừa thãi, không cần thiết thì bạn thử bỏ nó đi xem biết liền. Máy tính đâu có hỏng khi mà bạn thử việc đó, có phải không?

Để dễ debug, kiếm tấm bảng viết lên các bước, array của bạn nhỏ (ít phần tử) nên sẽ hiểu được ngay mà không phải viết quá nhiều.

5 Likes

Bài này thì bạn dùng 1 vòng lặp và 2 biến chạy, 1 từ đầu, 1 từ cuối, chạy và cộng dồn cho bên nào có tổng nhỏ hơn, đến khi chúng gặp nhau tại 1 điểm thì dừng; điểm gặp nhau chính là phần tử chia mảng thành 2 phần. Sau đó xét 2 tổng sẽ có kết quả.

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