• ベストアンサー

数字を当てさせるゲームについて

#include<stdio.h> #include<time.h> #include<stdlib.h> int main(void) { int limit=0; int no; /*当てさせる値*/ int num; /*入力する値*/ int max=9; srand(time(NULL)); no=rand()%1000; do{ printf("あと%d回入力できます。数字を入力してください。\n",max-limit); scanf("%d",&num); limit++; if(num>no) { printf("大きいです。\n"); } else if(num<no) { printf("小さいです。\n"); } }while(num!=no || limit<max) if(num==no) { printf("正解です。"); printf("%d回で当たりました。",limit); } else { printf("残念ながら不正解です。") } return 0; } これは、0以上999以下の整数を入力させて9回以内にランダムで 入力した値を当てさせるゲームです。 質問内容としては 当てさせる数字を「0以上999以下の数字」→「0以上999以下の3の倍数」に変更するにはどうすればよいかです。 よろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

未検証 no=rand()%1000; ってつまり no=rand()%(999 + 1); だわな。 ================ no = rand % (999 / 3 + 1); no = no * 3; にしてやればうまくいくんじゃないかと。 おまけ: 1000を変数だか定数だかにしてみよう(Wikipedia - マジックナンバー) http://ja.wikipedia.org/wiki/%E3%83%9E%E3%82%B8%E3%83%83%E3%82%AF%E3%83%8A%E3%83%B3%E3%83%90%E3%83%BC_%28%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%A0%29

rinnshan
質問者

お礼

ありがとうございました。 参考URLも見ておこうと思います。

その他の回答 (1)

  • asuncion
  • ベストアンサー率33% (2127/6289)
回答No.2

考え方の例: 0, 3, 6, 9, ..., 999 を作りたい ↓ 0から始まる連番に落とし込むことを考える ↓ 元の数列を3で割ってみる ↓ 0, 1, 2, 3, ..., 333 ↓ これで、rand() と剰余演算子が使える状態になった rand() % 334 ↓ 元の数列に戻す ↓ rand() % 334 * 3 おしまい

rinnshan
質問者

お礼

ありがとうございました^^

関連するQ&A

専門家に質問してみよう