c言語で以下の問題を解くプログラムを作りたいです。
50人の生徒がいて、1から50までの番号がついたロッカーがあります。
最初はロッカーは全て閉まっているとして、ある朝、
1番目にきた生徒は、1の倍数の番号のロッカーで開いているものは閉めて、閉まっているものは開ける(ただし、この時は全て閉まっているので全て開ける)
2番目にきた生徒は、2の倍数の番号のロッカーで開いているものは閉めて、閉まっているものは開ける(ただし、2の倍数のものはこの時は全て開いているので全て閉める)
3番目にきた生徒は、3の倍数の番号のロッカーで開いているものは閉めて、閉まっているものは開ける
4番目にきた生徒は、4の倍数の番号のロッカーで開いているものは閉めて、閉まっているものは開ける
以下、このようなルールで50番目にきた生徒までします。
50番目の生徒がこの操作を終えた後、何このロッカーが開いているでしょうか?
自分は、50の大きさの配列に開いている状態を1、閉まっている状態を−1として代入してプログラムを作ってみたのですがうまくいきませんでした。間違っているところを教えてほしいです。
↓自分で作ってみたものです。
C
1#include <stdio.h> 2 3void akeshime(int,int,int); 4 5int main(void){ 6 int n[50]={-1},i,j,x=0; 7 for(i = 1;i <= 50;i++){ 8 for(j = 0;j < 50;j++){ 9 akeshime(n[j],i,j+1); 10 } 11 } 12 for(i = 0;i < 50;i++){ 13 if(n[i]==1){ 14 x = x + 1; 15 } 16 } 17 printf("開いているロッカーの数:%d\n",x); 18 return 0; 19} 20 21void akeshime(int p,int q,int r){ 22 if(r%q==0 && p==-1){ 23 p = 1; 24 }else if(r%q==0 && p==1){ 25 p = -1; 26 } 27}
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/02/04 09:37