C言語で数当てゲームを作ろう!ヒント付きナンバー推測プログラムの作成方法
概要
本記事では、C言語を使った「数当てゲーム」プログラムの作り方を解説します。プログラム内にはあらかじめ正解となる数値(この例では64)が設定されており、ユーザーはその数値を予測して入力します。入力するたびに「大きすぎる」「小さすぎる」といったヒントが表示され、正解にたどり着くまで繰り返し挑戦できる仕組みです。
プログラムのロジック
数当てゲームで使用する判定ロジックは以下の通りです。
- 入力した数値が正解と一致した場合 → フラグを0にしてループを終了
- 入力した数値が正解より小さい場合 → 「もっと大きな数です」と表示し、試行回数をカウント
- 入力した数値が正解より大きい場合 → 「もっと小さな数です」と表示し、試行回数をカウント
- 不正解だった場合は再度入力を促す
do{
if(num==guess){
flag=0;
} else if(guess<num) {
flag=1;
printf("Your guess is lower than the number\n");
count++;
} else {
flag=1;
printf("Your guess is greater than the number\n");
count++;
}
if(flag==1) {
printf("sorry wrong enter! once again try it\n");
scanf("%d",&guess);
}
} while(flag);C言語によるサンプルコード
以下は、数当てゲームを実装したCプログラムの完全なソースコードです。
#include<stdio.h>
main() {
int i,num=64,flag=1,guess,count=0;
printf("guess the number randomly here are some clues later\n");
scanf("%d",&guess);
do {
if(num==guess) {
flag=0;
} else if(guess<num) {
flag=1;
printf("Your guess is lower than the number\n");
count++;
} else {
flag=1;
printf("Your guess is greater than the number\n");
count++;
}
if(flag==1) {
printf("sorry wrong enter! once again try it\n");
scanf("%d",&guess);
}
} while(flag);
printf("Congratulations! You guessed the correct number %d\n",num);
printf("Total number of trails you attempted for guessing is: %d\n",count);
}実行結果
上記のプログラムをコンパイルして実行すると、以下のような出力が得られます。
guess the number randomly here are some clues later 45 Your guess is lower than the number sorry wrong enter! once again try it 60 Your guess is lower than the number sorry wrong enter! once again try it 70 Your guess is greater than the number sorry wrong enter! once again try it 65 Your guess is greater than the number sorry wrong enter! once again try it 62 Your guess is lower than the number sorry wrong enter! once again try it 64 Congratulations! You guessed the correct number 64 Total number of trails you attempted for guessing is: 5
プログラムのポイント
このプログラムでは、do-while文を採用している点が特徴です。do-while文は条件判定をループの最後に行うため、少なくとも一度は必ず処理が実行されます。変数flagは正解判定の目印として機能し、正解するまでループが継続します。また、変数countによって何回の試行で正解できたかを記録し、最後にその回数を表示します。
ちなみに、範囲の中央値付近から順に絞り込んでいく「二分探索」の要領で数値を推測すれば、少ない試行回数で効率よく正解へたどり着くことができます。ぜひ実際にコードを動かしながら、試行回数がどう変わるのか試してみてください。
-
三角マッチ棒数を求めるC/C++プログラムの解説と実装例
三角マッチ棒数とはマッチ棒を正三角形の形に並べて作った三角形のことを「三角マッチ棒数(Triangular Matchstick Number)」と呼びます。三角マッチ棒数とは、そのマッチ棒の三角形を作るために必要なマッチ棒の本数を指します。問題の概要この問題では、マッチ棒で作るピラミッドの段数 X が与えられます。そして、X 段のマッチ棒ピラミッドを構成するために必要なマッチ棒の最小総本数を出力するプログラムを作成するのが課題です。概念をより明確にするために、具体例を見てみましょう。入力: 7 出力: 84解法の考え方この問題は、三角数(Triangular Number)の拡張として考える
-
Pythonで数Nの桁数を数えるプログラムの書き方
ある数Nが与えられたとき、その数に含まれる桁の総数を求めることを考えましょう。例えば以下のようなケースです。入力例1:N = 891452出力:6解説: 与えられた数891452は6桁の数字で構成されているため、この場合は「6」を返します。入力例2:N = 0074515出力:5解説: 先頭の0を除いた有効な桁数が5桁であるため、出力は「5」となります。この問題を解くためのアプローチこの問題は、次の手順で解決できます。数値nを入力として受け取ります。関数countDigits(n)が入力nを受け取り、桁数をカウントして返します。数値の各桁に対してループ処理を行い、カウンター変数を1ずつ増加させ