前提
プログラミングの勉強をはじめ、一週間ほど経った初心者の者です。
参考書を用いて勉強しているのですが、演習の問題で分からないものがあります。
参考書の問題はこうです。
「入力値を標準出力から受け取り、答えを標準出力に表示するシステムを作りましょう。」
あなたは今シンプルなRPGゲームを遊んでいるとします。
敵のHPは「h」で1ターンごとに以下のように進みます。
・あなたが敵を攻撃したら、敵のHPは「a」減ります。
・敵のHPが0以下になったら倒したことになります。
・敵は回復をするため、敵のHPは「b」増えます。
もし倒せるならば、1行目に「YES」を出力し、次の行にかかったターン数を出力して下さい。
倒せないならば、「NO」を出力して下さい。
(入力ルール)
h a b
1≤h≤10の18乗,整数
1≤a≤10の18乗,整数
1≤b≤10の18乗,整数
(出力ルール)
YES/NO
[n]
実現したいこと
自分なりに考えてコードを書いてみたのですが、思うようにいきませんでした、、
模範解答が載っていなかったので、出来れば模範解答を頂きたいです、、
自分でかいてみたコード
#include <stdio.h> #include <stdlib.h> int main(void) { int h; int a; int b; int n; int h1 = h-a; int h2 = h1+b; for(n=0; 0<h2; ++n){ scanf("%d", &h); scanf("%d", &a); scanf("%d", &b); } if(0>h2){ printf("Yes \n"); printf("%d", n); }else printf("NO"); return 0; }
実行してみた結果
Yes 0line[1]:
試したこと
まず、変数h1として、敵の体力(h)から自分からの攻撃の分(a)を引いた数として代入しました。
次に変数h2として、その引いた数(h1)に敵の回復した分(b)を足した数として代入しました。
そして次に、敵のHPが無くなるまでプログラムを繰り返すためにfor関数を用いてコードを書きました。
ここでの(n)は敵を倒すのにかかったターン数の変数として宣言し、インクリメントを用いて、その(n)を繰り返した分だけ加算していくようにしました。
forの式の真ん中の、(0<h2)は最終的の敵のHPをh2としているため、0より敵の体力が多かったら繰り返す、という意味を込めてこのコードを書きました。
そして最後に、もし敵の体力が0より小さくなったら、YESと、変数を(n)として置いたターン数を出力するようにし、
そうでなければ、NOを出力するようにしました。
補足情報(FW/ツールのバージョンなど)
自分でもなぜうまくいかないのか考えてみたのですが、考えていくうちに頭がごちゃごちゃしてきて途方に暮れてしまいました。
もし宜しければお手数ですが、模範解答と、何がいけないのか教えて頂けると幸いです。
回答4件
あなたの回答
tips
プレビュー