【C++】「数学パズル」カードを裏返せ
プログラマ脳を鍛える「数学パズル」の中にあるQ03カードを裏返せの考え方をC++で作ってみました。
説明
1~100までの番号が書かれた100枚のカードが順番に並べられています。
最初、すべてのカードは裏返しで置かれています。
1人目:2番目のカードから1枚おきに裏返し → 2,4,6,8・・・100が表となる
2人目:3番目のカードから2枚おきに裏返し → 2,3,4,8,9・・・が表となる
※裏返しは裏向きのカードは表を向き、表向きのカードは裏を向く
このようにn番目のカードからn-1枚おきにカードを裏返す作業を100枚目まで 続けたとき、裏向きになっているカードをすべて表示しなさい。
–答え
1
4
9
16
25
36
49
64
81
100
繰り返しで作成
#include <iostream>
using namespace std;
// カードを裏返す
void reverse()
{
int cards[100] = { 0 };
for (int i = 2; i <= 100; i++)
{
for (int j = i - 1; j < 100; j += i)
{
// 裏なら表へ、表なら裏へ
cards[j] = cards[j] == 0 ? 1 : 0;
}
}
for (int i = 0; i < 100; i++)
{
if (cards[i] == 0)
cout << i+1 << '\n';
}
}
int main()
{
reverse();
return 0;
}