C++でチェス盤に含まれる奇数の辺の長さを持つ正方形を数える方法
一辺の長さ size が与えられ、size × size のチェス盤(正方形のマス目)を考えます。このとき、盤面の中に作ることができる奇数の辺の長さを持つ正方形の総数を求めるのが本記事の目的です。
入力例と出力例
例1
入力:
size=3
出力:
Count of squares with odd side length in Chessboard are: 10
説明:
3×3 の盤面には、1×1 の小さな正方形が9個、2×2 の正方形が4個、そして盤全体の 3×3 の正方形が1個存在します。このうち辺の長さが奇数となるのは、1×1 の9個と 3×3 の1個、合計 10個 です。
例2
入力:
size=4
出力:
Count of squares with odd side length in Chessboard are: 20
説明:
4×4 の盤面には、1×1 の正方形が16個、3×3 の正方形が4個含まれます。したがって、奇数の辺の長さを持つ正方形は合計 20個 となります。
アルゴリズムのアプローチ
この問題は、次のようなシンプルな方法で解くことができます。
辺の長さを 1 から size まで順番に走査し、各奇数の長さ i に対して、その大きさの正方形が盤面内に何箇所に配置できるかを計算します。具体的には、(size − i + 1)² を答えに加算していきます。
手順
チェス盤の一辺の長さとして整数 size を入力として受け取ります。
関数 square_odd_length(int size) が size を受け取り、奇数の辺の長さを持つ正方形の個数を返します。
カウント用の変数 count を 0 で初期化します。
i = 1 から i = size まで、i を 2 ずつ増やしながらループを回し、奇数の i のみを処理します。
各 i について、temp = size − i + 1 を計算します。
temp × temp を count に加算します。
ループ終了後、count を結果として返します。
C++による実装例
#include <bits/stdc++.h>
using namespace std;
int square_odd_length(int size){
int count = 0;
for (int i = 1; i <= size; i = i + 2){
int temp = size − i + 1;
count = count + (temp * temp);
}
return count;
}
int main(){
int size = 6;
cout<<"Count squares with odd side length in Chessboard are: "<<square_odd_length(size);
return 0;
}実行結果
上記のコードを実行すると、以下の出力が得られます。
Count squares with odd side length in Chessboard are: 56
まとめ
このように、奇数の辺の長さごとに配置可能な位置の数を二乗で求めて足し合わせることで、効率的に正方形の総数を計算できます。計算量は O(size/2) となり、非常にシンプルかつ高速なアルゴリズムです。
-
【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
-
C++で指定された辺の長さを持つn辺の正多角形の面積を求める方法
この記事では、指定された辺の長さを持つn辺の正多角形の面積を求める問題を取り上げ、図形の面積を計算する公式を導出し、それに基づいたプログラムを作成します。まず、内容を理解しやすくするために、基本事項をおさらいしましょう。基本事項のおさらいn辺の正多角形とは、すべての辺の長さが等しいn個の辺を持つ多角形のことです。例えば、正五角形や正六角形などが挙げられます。面積とは、二次元の図形が占める広がりの大きさを数量的に表したものです。面積公式の導出正多角形の面積を求めるには、図形を構成する個々の三角形の面積を求め、それに辺の数nを掛けます。正多角形は、中心を共有する頂点としてn個の二等辺三角形に分割で