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

Đếm tổng số ô vuông mà Bishop có thể truy cập trong một lần di chuyển trong C ++


Trên bàn cờ được biểu diễn dưới dạng lưới 8 X 8, chúng ta có vị trí của Bishop dưới dạng vị trí hàng và cột. Mục đích là tìm tổng số ô vuông mà Bishop có thể ghé thăm trong một lần di chuyển. Chúng tôi biết Bishop có thể di chuyển theo mọi hướng (chéo trái lên / xuống và sang phải lên / xuống).

Đếm tổng số ô vuông mà Bishop có thể truy cập trong một lần di chuyển trong C ++

Ví dụ

Đầu vào

row = 5, column = 4

Đầu ra

Count of total number of squares that can be visited by Bishop in one move
are: 13

Giải thích

As shown in above figure the squares that Bishop can cover are 9.

Đầu vào

row = 1, column = 1

Đầu ra

Count of total number of squares that can be visited by Bishop in one move
are: 7

Giải thích

As this is the corner most position, then Bishop can only cover one
diagonal which can have a maximum of 7 squares.

Phương pháp tiếp cận được sử dụng trong chương trình dưới đây như sau -

Trong cách tiếp cận này, chúng tôi sẽ tính toán các hình vuông theo đường chéo sử dụng vị trí hình vuông tối đa và tối thiểu theo chiều ngang và chiều dọc.

  • Lấy số nguyên hàng và cột cho chức vụ giám mục.

  • Hàm square_visited (int đầu tiên, int thứ hai) lấy vị trí của Bishop và trả về số lượng ô vuông mà nó có thể truy cập trong một lần di chuyển.

  • Lấy số lượng ban đầu là 0.

  • Giá trị tối thiểu của vị trí bên trái là giá trị nhỏ nhất của vị trí hàng hoặc cột −1.

  • Vị trí bên trái tối đa là 8 - vị trí hàng hoặc 9 cột tối đa.

  • Giá trị tối thiểu của vị trí bên phải là giá trị nhỏ nhất của vị trí hàng hoặc 9 cột - 1.

  • Tối đa của vị trí bên phải là 8 - tối đa của vị trí hàng hoặc cột.

  • Tổng số bình phương sẽ là tổng của các vị trí được tính toán ở trên.

  • Kết quả là số lượt trả lại.

Ví dụ

#include <bits/stdc++.h>
using namespace std;
int squares_visited(int first, int second){
   int count = 0;
   int min_left = min(first, second) − 1;
   int max_left = 8 − max(first, 9 − second);
   int max_right = 8 − max(first, second);
   int min_right = min(first, 9 − second) − 1;
   count = min_left + min_right + max_right + max_left;
   return count;
}
int main(){
   int row = 3, column = 3;
   cout<<"Count of total number of squares that can be visited by Bishop in one move are: "<<squares_visited(row, column);
   return 0;
}

Đầu ra

Nếu chúng ta chạy đoạn mã trên, nó sẽ tạo ra kết quả sau -

Count of total number of squares that can be visited by Bishop in one move are: 11