先日、高校の一次試験(都立)を終え、一息つけましたので、久々にプログラミングをやっています
都立問題の四角1に、以下のような問題がありました
(確立問題のちょっと違う形?のような問題ですw)
[問7]
1から6までの目の出る大小1つずつのさいころを同時に1回投げる。
大きいさいころの出た目の数をa,小さいさいころの出た目の数をbとするとき、
bがaの倍数となる目の出方は全部で何通りあるか。
簡単な問題なのですが、プログラムに直すとうまくいかないのです
(ちなみに、入試でこの問題は間違えましたw難しく考えすぎて意味の分からない回答を書いてしm..(ry )
このようなプログラムを組みました
#include<stdio.h> int main(void){ int a,b,A; for(a=1; a<6; a++){ for(b=1; b<6; b++){ A=a+b; if(b/A==0){ printf("bはaの倍数です\n"); } } } return 0; }私の考え方としては、サイコロ(a)とサイコロ(b)を投げたと想定します
全パターンの計算をするために二重ループを使い、1*1から6*6まで計算するように組みました
サイコロ(b)の数が、サイコロ(a)の倍数であるのは何通りか、ということは、
A=a+bとして、bをAで割ればよいのではと考えました。割り切れたのであればbはaの倍数といえますからね。
割り切れた際は "bはaの倍数です" と表示するようにしました
結果上記のようなプログラムで実行してみました
すると、25個表示されました
何が問題なのでしょうか…;
それと、自分の知らない技術なのかも分かりませんが、"bはaの倍数です"とたくさん表示するのも良いのですが、bがaの倍数であったパターンが何パターンなのか文字で表示することは出来ないのでしょうか
単純に、"bはaの倍数です" と表示するのではなく、aがbで割り切れる限り変数 I に1を加算し続け、それを表示するようにしてみました
#include<stdio.h> int main(void){ int a,b,A,I=0; for(a=1; a<6; a++){ for(b=1; b<6; b++){ A=a+b; if(b/A==0){ I++; printf("%d 通り\n",I); } } } return 0; }ですが、これだと1通りです 2通りです 3通りです 4通りです... 、と表示されるだけです…;
最終結果だけ表示するにはどのようなプログラムを組めばよいのでしょうか
□追記□
文① <pre>~</pre> 文②<pre>~</pre> 文③
このような形で投稿すると文②の改行が効かなくなるのですが、原因は何なのでしょうか
