C#の下記の問題でわからないものがあるので教えて頂きたいです。 ソースコードももし可能であれば教えて下さい。
C#の下記の問題でわからないものがあるので教えて頂きたいです。 ソースコードももし可能であれば教えて下さい。 あるクラスには、50人の生徒がいます。廊下には、1から50番までの番号がついたロッカーが並んでいます。ある日、ロッカーを使って、次のような実験をしました。 ・しまっているロッカーは開ける ・開いているロッカーは閉める という実験です。最初はすべてのロッカーは閉じてあります。 朝1番に来た生徒は、1の倍数のロッカーのみを開け閉めし、 2番目に来た生徒は、2の倍数のロッカーを開け閉めし、 3番目に来た生徒は、3の倍数のロッカーを開けしめし、 ・・・ と、以下、同様に続きます。 最後にきた生徒が、ロッカーを開け閉めした後に、扉が開いているロッカーは、何個あるでしょうか? ヒント:整数型の長さ50の配列を用意し、開いているのを-1,閉じているものを1として、カウントしてみる。
ベストアンサー
当方C#初心者なので参考程度になれば幸いです。 int型の配列を[1,1,1,1,1,1,...,1,1](←1が50個)用意する。 1はロッカーが閉まっています。-1はロッカーは開いています。 ロッカーの状態がどうであれ、-1を掛ければロッカーは閉→開/開→閉 になることはご理解いただけますでしょうか。(ここ一番大事なとこ!わからなかったら質問ください。) for(int i = 0;i <= 49;i += 1){} とfor文を始め、{}内でロッカーの開け締めの操作を繰り返します。 つまり、i番目(正確にはi+1番目)の生徒が{}内の操作をする、これを50回繰り返すという感じですね。 for{}内では for(int i = 0;i <= 49;i += 1) { for(int k = 0;k <= 49; k += 1) { } } と、もうひとつfor文を作ります。こうすれば、「i番目の生徒が、k番目のロッカーのドアを開ける/閉める」というコードを作れそうです。 for(int k = 0;k <= 49; k += 1)の{}内では、if( k+1 % i+1 == 0)として、k+1がi+1の倍数のとき、最初に用意した配列のk番目の要素に-1を掛ければいいのではないでしょうか。この辺のコードは知恵袋上だと面倒なので質問者様ご自身で書いていただければと思います!><
質問者からのお礼コメント
回答頂きありがとうございました! 分かりやすかったのでベストアンサーにします!
お礼日時:5/21 20:24