[C言語] 3の倍数と3が付く数字を判定する方法を解説
C言語で3の倍数を判定するには、数値を3で割った余りを確認します。具体的には、if (number % 3 == 0)の条件を使用します。
一方、3が付く数字を判定するには、数値を文字列に変換し、文字列内に’3’が含まれているかを確認します。これにはsprintf関数で数値を文字列に変換し、strchr関数で’3’の存在をチェックします。
これらの方法を組み合わせることで、3の倍数または3が付く数字を効率的に判定できます。
3の倍数と3が付く数字を判定する方法
3の倍数の判定方法
3の倍数とは
3の倍数とは、整数を3で割ったときに余りが0になる数のことを指します。
例えば、3, 6, 9, 12などが3の倍数です。
3の倍数を判定するアルゴリズム
3の倍数を判定するためには、数値を3で割った余りを確認します。
余りが0であれば、その数は3の倍数です。
以下にアルゴリズムの概要を示します。
- 数値を3で割る
- 余りを確認する
- 余りが0であれば3の倍数と判定
C言語での実装例
以下は、C言語で3の倍数を判定するプログラムの例です。
#include <stdio.h>
int main() {
    int number;
    printf("整数を入力してください: ");
    scanf("%d", &number);
    // 3の倍数かどうかを判定
    if (number % 3 == 0) {
        printf("%dは3の倍数です。\n", number);
    } else {
        printf("%dは3の倍数ではありません。\n", number);
    }
    return 0;
}整数を入力してください: 9
9は3の倍数です。このプログラムは、ユーザーから整数を入力させ、その整数が3の倍数であるかどうかを判定します。
3が付く数字の判定方法
3が付く数字とは
3が付く数字とは、数値の中に3という数字が含まれているものを指します。
例えば、3, 13, 23, 30, 31などが該当します。
3が付く数字を判定するアルゴリズム
3が付く数字を判定するためには、数値を文字列に変換し、その中に’3’という文字が含まれているかを確認します。
以下にアルゴリズムの概要を示します。
- 数値を文字列に変換
- 文字列内に’3’が含まれているかを確認
- 含まれていれば3が付く数字と判定
C言語での実装例
以下は、C言語で3が付く数字を判定するプログラムの例です。
#include <stdio.h>
#include <string.h>
int main() {
    char numberStr[20];
    printf("整数を入力してください: ");
    scanf("%s", numberStr);
    // 3が付く数字かどうかを判定
    if (strchr(numberStr, '3') != NULL) {
        printf("%sは3が付く数字です。\n", numberStr);
    } else {
        printf("%sは3が付く数字ではありません。\n", numberStr);
    }
    return 0;
}整数を入力してください: 23
23は3が付く数字です。このプログラムは、ユーザーから入力された整数を文字列として扱い、その中に’3’が含まれているかを判定します。
3の倍数または3が付く数字の判定
複合条件の判定方法
3の倍数または3が付く数字を判定するためには、上記の2つの条件を組み合わせて判定します。
どちらか一方の条件を満たせば、該当するものとします。
- 3の倍数かどうかを判定
- 3が付く数字かどうかを判定
- どちらかの条件を満たせば該当
C言語での実装例
以下は、C言語で3の倍数または3が付く数字を判定するプログラムの例です。
#include <stdio.h>
#include <string.h>
int main() {
    int number;
    char numberStr[20];
    printf("整数を入力してください: ");
    scanf("%d", &number);
    sprintf(numberStr, "%d", number);
    // 3の倍数または3が付く数字かどうかを判定
    if (number % 3 == 0 || strchr(numberStr, '3') != NULL) {
        printf("%dは3の倍数または3が付く数字です。\n", number);
    } else {
        printf("%dは3の倍数でも3が付く数字でもありません。\n", number);
    }
    return 0;
}整数を入力してください: 13
13は3の倍数または3が付く数字です。このプログラムは、入力された整数が3の倍数であるか、または3が付く数字であるかを判定します。
効率的な判定方法の考察
効率的な判定方法を考える際には、数値の範囲や入力の頻度を考慮する必要があります。
例えば、数値が非常に大きい場合や頻繁に判定を行う場合は、文字列変換のコストを削減する方法を検討することが重要です。
条件を組み合わせる際には、最も頻繁に成立する条件を先に判定することで、処理の効率を向上させることができます。
応用例
フィズバズ問題への応用
フィズバズ問題とは
フィズバズ問題は、プログラミングの基本的な練習問題としてよく知られています。
1から順に数を数え、3の倍数のときは Fizz 、5の倍数のときは Buzz 、両方の倍数のときは FizzBuzz と出力します。
この問題は、条件分岐やループの理解を深めるために役立ちます。
3の倍数と3が付く数字を使ったフィズバズの実装
フィズバズ問題に3が付く数字の判定を加えることで、より複雑なロジックを実装できます。
以下はその例です。
#include <stdio.h>
#include <string.h>
void fizzBuzzWithThree(int n) {
    for (int i = 1; i <= n; i++) {
        char numberStr[20];
        sprintf(numberStr, "%d", i);
        if (i % 3 == 0 || strchr(numberStr, '3') != NULL) {
            printf("Fizz");
        }
        if (i % 5 == 0) {
            printf("Buzz");
        }
        if (i % 3 != 0 && strchr(numberStr, '3') == NULL && i % 5 != 0) {
            printf("%d", i);
        }
        printf("\n");
    }
}
int main() {
    fizzBuzzWithThree(30);
    return 0;
}1
2
Fizz
4
Buzz
Fizz
7
8
Fizz
Buzz
11
Fizz
Fizz
14
FizzBuzz
16
17
Fizz
19
Buzz
Fizz
22
Fizz
Fizz
Buzz
26
Fizz
28
29
FizzBuzzこのプログラムは、1から30までの数を対象に、3の倍数または3が付く数字のときに Fizz 、5の倍数のときに Buzz を出力します。
ゲーム開発での利用
数字判定を使ったゲームロジック
ゲーム開発において、特定の数字を判定するロジックは、スコア計算やイベントトリガーに利用されます。
例えば、プレイヤーのスコアが3の倍数や3が付く数字のときに特別なボーナスを与えるといった実装が考えられます。
3の倍数と3が付く数字を使ったゲームの例
以下は、3の倍数または3が付く数字のときに特別なメッセージを表示するゲームの例です。
#include <stdio.h>
#include <string.h>
void specialNumberGame(int score) {
    char scoreStr[20];
    sprintf(scoreStr, "%d", score);
    if (score % 3 == 0 || strchr(scoreStr, '3') != NULL) {
        printf("特別なボーナスを獲得しました!\n");
    } else {
        printf("通常のスコアです。\n");
    }
}
int main() {
    int score;
    printf("スコアを入力してください: ");
    scanf("%d", &score);
    specialNumberGame(score);
    return 0;
}スコアを入力してください: 33
特別なボーナスを獲得しました!このプログラムは、入力されたスコアが3の倍数または3が付く数字である場合に特別なメッセージを表示します。
データ解析での利用
データセット内の特定の数字を抽出
データ解析において、特定の条件に合致するデータを抽出することは重要です。
3の倍数や3が付く数字を含むデータを抽出することで、特定のパターンを見つけることができます。
3の倍数と3が付く数字を使ったデータ解析の例
以下は、データセットから3の倍数または3が付く数字を抽出する例です。
#include <stdio.h>
#include <string.h>
void extractSpecialNumbers(int data[], int size) {
    for (int i = 0; i < size; i++) {
        char numberStr[20];
        sprintf(numberStr, "%d", data[i]);
        if (data[i] % 3 == 0 || strchr(numberStr, '3') != NULL) {
            printf("%dは特別な数字です。\n", data[i]);
        }
    }
}
int main() {
    int data[] = {10, 13, 15, 23, 30, 31, 33, 40};
    int size = sizeof(data) / sizeof(data[0]);
    extractSpecialNumbers(data, size);
    return 0;
}13は特別な数字です。
15は特別な数字です。
23は特別な数字です。
30は特別な数字です。
31は特別な数字です。
33は特別な数字です。このプログラムは、配列内の数値をチェックし、3の倍数または3が付く数字を特別な数字として抽出します。
まとめ
この記事では、C言語を用いて3の倍数と3が付く数字を判定する方法について詳しく解説しました。
3の倍数の判定方法、3が付く数字の判定方法、そしてそれらを応用したフィズバズ問題やゲーム開発、データ解析での利用例を紹介しました。
これらの知識を活用して、プログラミングのスキルをさらに向上させてください。
 
![[C言語] rand関数の使い方 – 乱数の生成](https://af-e.net/wp-content/uploads/2024/10/thumbnail-47161.png)
![[C言語] 複素数を計算する簡単な方法](https://af-e.net/wp-content/uploads/2024/09/thumbnail-43965.png)
![[C言語] 複素数の絶対値を計算する方法](https://af-e.net/wp-content/uploads/2024/09/thumbnail-43967.png)
![[C言語] 複素数の計算に構造体を活用する方法](https://af-e.net/wp-content/uploads/2024/09/thumbnail-43966.png)
![[C言語] 複素数(complex.h)をprintf関数で出力する方法](https://af-e.net/wp-content/uploads/2024/09/thumbnail-43964.png)
![[C言語] 虚数解を含む二次方程式を計算する方法](https://af-e.net/wp-content/uploads/2024/09/thumbnail-43963.png)
![[C言語] xのy乗を求める方法 – pow() / for文](https://af-e.net/wp-content/uploads/2024/09/thumbnail-43962.png)
![[C言語] complex型を使った複素数値の計算(四則演算)](https://af-e.net/wp-content/uploads/2024/09/thumbnail-43961.png)
![[C言語] 数値が自然数か判定する方法を解説](https://af-e.net/wp-content/uploads/2024/08/thumbnail-4831.png)
![[C言語] 約数を大きい順に表示していくプログラムの書き方を解説](https://af-e.net/wp-content/uploads/2024/08/thumbnail-4746.png)
![[C言語] クイックソートで中央値を求める方法を解説](https://af-e.net/wp-content/uploads/2024/08/thumbnail-4455.png)
![[C言語] 長方形の面積を計算する方法を解説](https://af-e.net/wp-content/uploads/2024/08/thumbnail-4443.png)