電球がONである数を数えるプログラム
問題
1からnまでの数字が振られたn個の電球がある。これらの電球に対して、次の操作を順に行う。
・1の倍数の電球のON/OFFを切り替える。
・2の倍数の電球のON/OFFを切り替える。
・mの倍数の電球のON/OFFを切り替える。
このとき、最終的にONになっている電球の数を出力するプログラム作成せよ。最初は全ての電球がOFFになっているものとする。
入力例 出力例
12 3 電球ONの数:6
25 9 電球ONの数:14
500 162 電球ONの数:256
1000 1000 電球ONの数:31
コード
#include <stdio.h> #include <stdlib.h> //電球をnの倍数で切り替える処理 void switchBulbs(int *bulbs, int multiple, int count){ for(int num = multiple-1; num < count; num += multiple){ if(bulbs[num] == 0){ bulbs[num] = 1; }else{ bulbs[num] = 0; } } } int main(void){ int n,m; scanf("%d%d",&n,&m); int *bulbs = (int*)malloc(n * sizeof(int)); for(int num = 0; num < n; ++num){ bulbs[num] = 0; } for(int num = 1; num < m + 1 ; ++num){ switchBulbs(bulbs, num, n); } int sum = 0; for(int num = 0; num < n; ++num){ if(bulbs[num] == 1){ ++sum; } } free(bulbs); printf("電球ONの数:%d",sum); }
入力
1000 1000
出力
電球ONの数:31
ただ、もっとスマートなコードがあったので
あまり宛てにしないでください。。。orz