C++
 Computer >> コンピューター >  >> プログラミング >> C++

C++でビショップが1回の移動で到達できるマスの総数を数える方法

8×8のマス目で表されるチェス盤上に、ビショップ(Bishop)の位置が行番号と列番号の形式で与えられます。この記事の目的は、ビショップが1回の移動で到達できるマスの総数を求めることです。ビショップは斜め方向(左上・左下・右上・右下の4方向)にのみ移動できる駒である点に注意してください。

C++でビショップが1回の移動で到達できるマスの総数を数える方法

入出力例

例1

入力:

row = 5, column = 4

出力:

ビショップが1回の移動で到達できるマスの総数:13

説明:上の図に示したように、この位置ではビショップは4つの斜め方向すべてに移動でき、合計13マスをカバーできます。

例2

入力:

row = 1, column = 1

出力:

ビショップが1回の移動で到達できるマスの総数:7

説明:この位置は盤面の隅にあたるため、ビショップが利用できるのは1本の斜め線だけです。そのため、到達できるのはその斜め線上の最大7マスのみとなります。

プログラムで使用するアプローチ

このアプローチでは、ビショップの現在位置から盤面の端までの距離(水平・垂直方向の最小値と最大値)をもとに、各斜め方向に進めるマス数を計算します。

  • ビショップの位置として、整数型の行(row)と列(column)を受け取ります。
  • 関数 squares_visited(int first, int second) はビショップの位置を受け取り、1回の移動で到達できるマスの数を返します。
  • カウント用の変数を0で初期化します。
  • 左上方向へ進めるマス数:min(row, column) − 1
  • 左下方向へ進めるマス数:8 − max(row, 9 − column)
  • 右上方向へ進めるマス数:min(row, 9 − column) − 1
  • 右下方向へ進めるマス数:8 − max(row, column)
  • これら4つの値の合計が、ビショップが1回の移動で到達できるマスの総数になります。
  • 計算結果を返します。

なお、この方法では盤面の端までの距離を直接計算するためループ処理が不要であり、計算量はO(1)で済みます。ビショップの位置がどこであっても一定の時間で答えを求められるのが大きな利点です。

コード例

#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;
}

出力

上記のコードを実行すると、次の出力が生成されます。

Count of total number of squares that can be visited by Bishop in one move are: 11
  1. 【C++】長方形に含まれる正方形の総数を求めるアルゴリズムと実装

    縦の長さL、横の幅B(L≥B)の長方形が与えられたとします。この記事では、L×Bの長方形の中にいくつの正方形が含まれているかを効率的に求める方法を解説します。 上の図は3×2の長方形の例です。この長方形には、2×2の正方形が2個、1×1の正方形が6個含まれています。 合計:6+2=8個 規則性を見つける まず、正方形だけで構成されたB×Bの図形について考えてみましょう。 サイズL×Bの長方形には、必ずL×B個の1×1の正方形が含まれます。 含まれる最大の正方形のサイズはB×Bです。 L=B=1の場合:正方形の数=1 L=B=2の場合:正方形の数=1+4=5(2×2が1個、1×1が4個) L

  2. C++で直角二等辺三角形に収まる正方形の最大数を求める方法

    この記事では、底辺の長さが「s」である直角二等辺三角形の中に、一辺「a」の正方形を最大でいくつ収めることができるかを求める問題を解説します。二等辺三角形とは、少なくとも2つの等しい辺を持つ三角形のことです。 まず、具体例を使って何をすべきかを理解しましょう。 入力例 s=5, a=1 出力 10 説明 − 底辺に並べられる正方形の数は、「s を a で割って 1 を引く」ことで求められます。つまり、底辺の正方形の数 = 5/1 − 1 = 4 個です。 同様に、最下段に4つの正方形を配置すると、その上に底辺が (s−a) の新しい二等辺三角形ができます。同じ手順を繰り返すと3個、さらにその上