天天看點

算法趣題-Q03一、問題描述二、問題分析三、代碼實作

一、問題描述

算法趣題-Q03一、問題描述二、問題分析三、代碼實作

二、問題分析

        這裡補充一點,由于隻有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)

           

繼續閱讀