---
title: "条件付き文字列の数え方とは？場合分けと積の法則【基本情報技術者試験】"
description: "条件付き文字列の数え方を、各位置を独立に選べる場合と、前の選択によって後ろが制限される場合に分けて整理し、積の法則・和の法則・重複を許す並べ方の判断軸をFE試験向けに解説します。"
last_modified_at: "2026-07-15"
canonical_url: "https://stemtazoo.github.io/fe/counting-constrained-strings/"
section: "fe"
---

## まず結論

条件付き文字列の数え方では、**各位置を独立に選べるか、前の選択によって後ろの選択肢が変わるか**を最初に確認します。

基本情報技術者試験では、次の切り分けが重要です。

```text
各位置を独立に選べる
→ 選択肢の数を掛ける

前の選択で後ろが制限される
→ 形ごとに場合分けして足す
```

また、同じ文字や数字を繰り返してよい場合は、順列ではなく、各位置の選択肢を掛けて考えます。

## 直感的な説明

3文字のコードを作る場面を考えます。

各位置に数字0〜9の10種類を自由に使えるなら、

```text
1文字目：10通り
2文字目：10通り
3文字目：10通り
```

なので、

```text
10 × 10 × 10 = 1,000通り
```

です。

一方で、次のような条件がある場合は注意が必要です。

```text
空白を使った後には数字を置けない
```

このとき、3文字の並びは自由ではありません。

```text
数字・数字・数字
数字・数字・空白
数字・空白・空白
```

のように、許される形ごとに分けて数えます。

## 定義・仕組み

文字列や識別コードの数え方では、主に次の2つの法則を使います。

### 積の法則

複数の選択を順番に行い、それぞれの選択肢を組み合わせる場合は掛け算を使います。

```text
1文字目が10通り
2文字目が10通り
3文字目が10通り

10 × 10 × 10
```

各位置を独立に選べることが前提です。

### 和の法則

互いに重ならない複数のパターンがある場合は、それぞれを数えて足します。

```text
数字3文字のパターン
+
数字2文字と空白のパターン
+
数字1文字と空白2文字のパターン
```

つまり、

```text
形ごとに掛け算
最後に足し算
```

という流れです。

### 重複を許す場合

同じ数字や文字を繰り返してよい場合、各位置で同じ選択肢を何度でも使えます。

例えば、10種類の数字から3文字を作り、同じ数字を繰り返してよいなら、

```text
10 × 10 × 10 = 10³
```

です。

これは、異なる3個を並べる順列 `10P3` ではありません。

このテーマは、基本情報技術者試験の「基礎理論」と関係する内容です。公式の出題範囲やシラバスは、[IPA：基本情報技術者試験](https://www.ipa.go.jp/shiken/kubun/fe.html) から確認できます。

## 科目Aでどう出る？

科目Aでは、パスワード、識別コード、文字列、ビット列などの組合せ数を求める問題として出題されます。

まず、次の順番で確認します。

```text
1. 各位置で使える文字は何種類か
2. 同じ文字を繰り返してよいか
3. 各位置を独立に選べるか
4. 禁止されている並びはあるか
```

各位置を独立に選べるなら、選択肢の数を掛けます。

```text
英大文字26種類から4文字
重複使用可

26 × 26 × 26 × 26
```

一方、次のような条件があれば場合分けが必要です。

- 特定の文字は先頭に使えない
- 空白の後には文字を置けない
- 数字は末尾にしか置けない
- 同じ文字を連続して使えない

試験では、条件文を読み飛ばして単純に掛け算しないことが大切です。

## 科目Bでどう使う？

科目Bでは、文字列生成や探索処理の候補数を考える場面で役立ちます。

例えば、プログラムが次のような条件で候補を生成するとします。

```text
先頭は必ず数字
途中から空白を使える
空白を使った後は空白だけ
```

この場合、全候補を作るループや再帰処理では、状態によって次に選べる文字が変わります。

```text
まだ空白を使っていない
→ 数字または空白を選べる

すでに空白を使った
→ 空白だけ選べる
```

科目Bでは、単に答えの個数を求めるだけでなく、**条件によって分岐する処理を読み取る視点**が役立ちます。

## よくある誤解・混同

| 誤解 | 正しい理解 |
|---|---|
| 各位置に11種類あるので、常に11の累乗でよい | 禁止パターンがある場合は、各位置を独立に選べない |
| 同じ数字を使える場合も順列を使う | 重複を許す場合は、各位置の選択肢を掛ける |
| 場合分けしたら最後も掛ける | 互いに重ならないパターンは最後に足す |
| 空白は1種類なので無視してよい | 空白を置いた後の制約が重要になることがある |
| 条件付きでも全体から禁止パターンを引けば必ず簡単 | 形ごとに直接数える方が分かりやすい場合も多い |

一番重要な判断軸は、**各位置を独立に選べるかどうか**です。

```text
独立に選べる
→ 掛け算

独立に選べない
→ 状態や形で場合分け
```

## まとめ（試験直前用）

- 各位置を独立に選べるなら、選択肢の数を掛ける
- 前の選択で後ろが制限されるなら、形ごとに場合分けする
- 互いに重ならないパターンは最後に足す
- 同じ文字を繰り返してよい場合は、順列ではなく累乗を考える
- 「先頭」「以降」「後には置けない」などの条件語を見落とさない
