一、問題描述
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIiNx8FesU2cfdGLwczX0xiRGZkRGZ0Xy9GbvNGLwIzXlpXazxSP9cXY1FzQhFnVuJVQClGVF5UMR9Fd4VGdsATNfd3bkFGazxycykFaKdkYzZUbapXNXlleSdVY2pESa9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZwpmL1YzM5MjM0YTM1ATOwEjMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.jpg)
二、問題分析
這裡補充一點,由于隻有100張牌按序排列,故n不大于100,不用考慮的過于複雜。
此題的解決想法比較簡單,按題幹順序程式設計即可。但在結果出來後,會發現結果具有一緻的某種性質,同時這個翻牌遊戲與數的因子數目具有一定的關系。那麼,在做題前找到這個關系就可以很容易的解決該問題,但這不妨礙我們暴力解決,暴力代碼如下。
三、代碼實作
1.C/C++ 實作
#include <iostream>
using namespace std;
int main()
{
bool cards[101];
memset(cards, true, sizeof(cards));
// 逐一反面
for (int i = 2; i < 101; i++)
{
for (int j = i; j < 101; j += i)
{
cards[j] = !cards[j];
}
}
// 輸出
for (int i = 1; i < 101; i++)
{
if (cards[i])
{
cout << i << endl;
}
}
return 0;
}
2.Python實作
# coding=utf-8
def gaming():
# 用 True 表示反面
cards = [True] * 101
for i in range(2, 101):
j = i
while j < 101:
cards[j] = not cards[j]
j += i
return tuple(cards)
if __name__ == '__main__':
cards = gaming()
for i in range(1, 101):
if cards[i]:
print(i)