C++で円をN回カットしたときのピース数を計算する方法
問題の概要
整数Nが与えられます。このNは、2次元平面上の円に対して加える「カット(切り込み)」の回数を表します。1回のカットによって円は2つに分けられるため、N回のカットを行った後に円がいくつのピースに分割されるかを求めるのが、この問題の目的です。
計算式
この問題はとてもシンプルで、次の式で答えを求めることができます。
ピースの数 = 2 × カットの回数(N)
各カットが円の中心を通って切断されると考えると、カット1回ごとにピースが2つずつ増えていくため、この式が成り立ちます。
具体例
入力: N = 1
出力: 円のピース数: 2
説明: 1回のカットで、円はちょうど2つの半分に分けられます。

入力: N = 3
出力: 円のピース数: 6
説明: 3回のカットにより、円は合計6つのピースに分割されます。

解法のアプローチ
- カットの回数Nを受け取ります。
- ピース数を「2 × N」として計算します。
- 計算結果を出力します。
C++での実装例
#include <bits/stdc++.h>
using namespace std;
int main(){
int N = 2;
int pieces = 2 * N;
cout << endl << "Number of pieces of circle: " << pieces;
return 0;
}出力結果
上記のコードを実行すると、以下のような出力が得られます。
Number of pieces of circle: 4
まとめ
中心を通るカットをN回行った場合、円のピース数は「2 × N」というシンプルな式で求められます。計算量はO(1)で、追加のメモリも不要なため、非常に効率的な解法と言えます。
-
C++とOpenCVを使って画像内の顔の数を数える方法
OpenCVを利用すれば、画像に写っている顔の数を数えるのはとても簡単です。実は、前章で作成した顔検出プログラムには、すでに検出した顔の数の情報が含まれています。その情報は faces.size() というコードで取得でき、このコードは整数値(int型)を返します。例えば、int x = faces.size(); と記述すれば、変数 x には画像から検出された顔の数が格納されます。以下のプログラムは、指定した画像から顔の数を計算し、その結果をコンソール画面に表示するものです。サンプルコード#include<iostream> #include<opencv2/highgui
-
C++で重みが完全平方数となるノードを数える方法
各ノードに重みが割り当てられた二分木が与えられたとき、「重みが完全平方数であるノード」の個数を求めるのが本記事の目的です。例えば、あるノードの重みが36であれば、36 = 6² と表せるため、このノードはカウント対象となります。例入力値を入力して作成される木は以下の通りです。出力Count the nodes whose weight is a perfect square are: 4説明各ノードとそれに対応する重みが与えられており、それぞれの重みが完全平方数かどうかを確認します。ノード重み完全平方数該当するか212111 × 11はい1819 × 9はい437素数(平方数ではない)いいえ3