【C++】名前の末尾から男性名・女性名を判定するプログラムの書き方
問題概要
配列 input に n 個の名前(文字列)が与えられたとします。この中から、各名前が男性名か女性名かを判定して出力するのが本記事の目的です。
判定基準はとてもシンプルです。名前の末尾が「a」「e」「i」「y」のいずれかで終わっていれば女性名とみなし、それ以外は男性名と判断します。そして、すべての名前に対して「Male」または「Female」を出力します。
たとえば、入力が n = 5、input = {"Lily", "Rajib", "Thomas", "Riley", "Chloe"} の場合、出力は「Female, Male, Male, Female, Female」となります。
アルゴリズムの流れ
この問題は、以下の手順に従うことで解くことができます。
i := 0 で初期化し、i < n の間繰り返す(i を 1 ずつ増加):
s := input[i]
l := s の文字数
もし s[l - 1] が 'a'、'e'、'i'、'y' のいずれかに一致する場合:
"Female" を出力
それ以外の場合:
"Male" を出力C++による実装例
それでは、実際のC++コードを見ていきましょう。
#include <bits/stdc++.h>
using namespace std;
#define N 100
void solve(int n, string input[]) {
for(int i = 0; i < n; i++) {
string s = input[i];
int l = s.size();
if (s[l - 1] == 'a' || s[l - 1] == 'e' || s[l - 1] == 'i' || s[l - 1] == 'y')
cout<< "Female" << endl;
else
cout << "Male" << endl;
}
}
int main() {
int n = 5;
string input[] = {"Lily", "Rajib", "Thomas", "Riley", "Chloe"};
solve(n, input);
return 0;
}入力例
5, {"Lily", "Rajib", "Thomas", "Riley", "Chloe"}出力例
Female Male Male Female Female
コードの解説
このプログラムでは、solve 関数内の for ループで配列内の各名前を順番に処理しています。s.size() で名前の長さを取得し、s[l - 1] によって最後の文字へアクセスします。末尾の文字が条件('a'、'e'、'i'、'y' のいずれか)に一致すれば「Female」を、そうでなければ「Male」を出力します。
各名前を一度だけチェックするため、計算量は O(n) ときわめて効率的です。初心者の方にも理解しやすい、文字列操作と条件分岐の基本的な組み合わせを学べる良い例題といえるでしょう。
-
C++でnラウンド制ゲームの勝者を判定するコード
2人のプレイヤーが対戦するnラウンド制のゲームを考えてみましょう。各ラウンドのスコアは配列「scores」で与えられ、各要素は{P1のスコア, P2のスコア}という形式になっています。各ラウンドではスコアが高い方のプレイヤーがそのラウンドに勝利し、より多くのラウンドを制したプレイヤーがゲーム全体の勝者となります。両者の勝利数が同じ場合は引き分けと判定されます。この記事では、与えられたスコアをもとに、誰がゲームに勝ったのかを判定するプログラムをC++で実装します。例えば、入力が n = 4、scores = {{4, 3}, {3, 2}, {5, 6}, {2, 5}} の場合、出力は「Dra
-
C++でバッテリーの組み合わせ数を求めるアルゴリズム
最大5回まで使用できるバッテリーがn本あるとします。ここで、3本のバッテリーを必要とするデバイスがあり、デバイスを使用するたびにバッテリーの使用回数が1ずつ増加します。デバイスをk回使用したい場合、それらを動かすために何通りのバッテリーの組み合わせを作れるかを求める必要があります。ただし、1本のバッテリーを複数のデバイスで同時に使用することはできず、すでに5回使用されたバッテリーは組み合わせに含められません。各バッテリーの現在の使用回数は配列battとして与えられます。例えば、入力が n = 6、k = 2、batt = {2, 4, 4, 2, 1, 3} の場合、出力は 1 になります。こ