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

Chương trình C ++ để tìm ra số lượng các hoạt động để tối đa hóa số lượng các ô được đánh số chẵn trong một lưới

Giả sử, chúng ta được cung cấp một lưới có kích thước h * w. Mỗi ô trong lưới có một giá trị cụ thể được gán cho nó. Chúng ta phải tối đa hóa các ô có giá trị chẵn. Để làm điều đó, chúng ta có thể chọn một ô chưa được chọn trước đó, sau đó giảm giá trị của 1 ô hiện tại và tăng giá trị của 1 ô khác nằm theo chiều dọc hoặc chiều ngang liền kề với ô hiện tại. Chúng tôi in ra số lượng các phép toán và số ô của các phép toán tăng và giảm. Đầu ra sẽ có định dạng bên dưới -

  • số lượng hoạt động

  • Thứ nhất (giảm vị trí ô) - (tăng vị trí ô)

    ....

  • thứ n (giảm vị trí ô) - (tăng vị trí ô)

Vì vậy, nếu đầu vào là h =3, w =3, grid ={{2, 3, 4}, {2, 0, 1}, {1, 2, 3}}, thì đầu ra sẽ là

 4 (0, 1) - (0, 2) (2, 0) - (2, 1) (2, 1) - (2, 2) (0, 2) - (1, 2)  

Các bước

Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -

 Xác định kết quả mảng mới có chứa tuplefor khởi tạo i:=0, khi i 
 0, then:insert tuple (i, j - 1, i, j) vào cuối kết quả lưới [i, j]:=grid [i, j] + tp nếu lưới [i, j] mod 2 giống 1 và j 
 0, sau đó:chèn tuple (i - 1, w - 1, i, w - 1) vào cuối kết quả [i, w - 1]:=grid [i, w - 1] + tpif grid [i, w - 1] mod 2 giống với 1, sau đó:grid [i, w - 1]:=grid [i, w - 1] - 1tp:=1Otherwisetp:=0print (kích thước của kết quả) để khởi tạo i:=0, khi i  

Ví dụ

Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -

 #include  using namespace std; void Giải (int h, int w, vector > grid) {vector > result; for (int i =0; i 
 0) {result.push_back (make_tuple (i, j-1, i, j)); lưới [i] [j] + =tp; } if (grid [i] [j]% 2 ==1 &&j 
 0) {result.push_back (make_tuple (i-1, w-1, i, w-1)); lưới [i] [w-1] + =tp; } if (grid [i] [w-1]% 2 ==1) {grid [i] [w-1] - =1; tp =1; } else tp =0; } cout <<(int) result.size () < (result [i]) <<"," < (kết quả [i]) <<")" <<"- (" < (kết quả [i]) <<"," < (kết quả [i]) <<") "; cout <<'\ n'; }} int main () {int h =3, w =3; vector > grid ={{2, 3, 4}, {2, 0, 1}, {1, 2, 3}}; giải quyết (h, w, lưới); trả về 0;} 

Đầu vào

 3, 3, {{2, 3, 4}, {2, 0, 1}, {1, 2, 3}} 

Đầu ra

 4 (0, 1) - (0, 2) (2, 0) - (2, 1) (2, 1) - (2, 2) (0, 2) - (1, 2)