Computer >> Máy Tính >  >> Lập trình >> C ++

Giá trị lớn nhất của | arr [0] - arr [1] - + | arr [1] - arr [2] - +… + | arr [n - 2] - arr [n - 1] - khi các phần tử từ 1 đến n trong C ++


Trong bài toán này, chúng ta được đưa ra một mảng n số nguyên thuộc phạm vi [1, n]. Nhiệm vụ của chúng ta là tạo một chương trình tìm giá trị lớn nhất của | arr [0] - arr [1] - + | arr [1] - arr [2] - +… + | arr [n - 2] - arr [ n - 1].

Hãy lấy một ví dụ để hiểu vấn đề,

Đầu vào - mảng ={1, 2, 3}

Đầu ra - 3

Giải thích -

 tổng tối đa là | 1-3 | + | 2-1 | =3 

Để giải quyết vấn đề này, một cách tiếp cận đơn giản là tạo tất cả các hoán vị từ mảng. Và tìm giá trị lớn nhất của tất cả các giá trị từ hoán vị. Một phương pháp hiệu quả hơn là tổng quát tất cả các giá trị lớn nhất cho mỗi giá trị của n và sau đó tạo một công thức chung.

Vì vậy,

Tổng tối đa cho (n =1) =0 Tổng tối đa cho (n =2) =1 Tổng tối đa cho (n =3) =3M Tổng tối đa cho (n =4) =7 Tổng tối đa cho (n =5) =11 Vì vậy, giá trị lớn nhất là 0, 1, 3, 7, 11…

Công thức chung là (((n * n / 2) -1)

Ví dụ

Chương trình minh họa hoạt động của giải pháp của chúng tôi,

 #include  using namespace std; int maxAbsVal (int n) {if (n ==1) return 0; return ((n * n / 2) - 1);} int main () {int n =4; cout <<"Tổng lớn nhất của hiệu số tuyệt đối là" < 

Đầu ra

 Tổng chênh lệch tuyệt đối lớn nhất là 7