C#,21根火柴棍问题(21 Matchticks Problem)的算法与源代码

一、21根火柴棍问题(21 Matchticks Problem)

21根火柴棍问题是西方经典游戏之一。

给定21根火柴,2个人A和B(比如:分别是计算机和用户)。

每个人一次可以挑选 1-- 4 根火柴。

被迫挑最后一根火柴的人输了。

二、确保自己胜利(玩赖)的办法

这个想法是考虑20根火柴棒,因为谁会选择最后一根火柴,谁就会输掉比赛。

将20分成四部分,即每个部分的大小为5。

因此,如果电脑选择了x根火柴棒,那么用户应该选择(5-x)根火柴棒,并以同样的方式进行操作。

这样,20根火柴将被使用,最后一根火柴将由计算机拾取。

源代码:

cs 复制代码
using System;
using System.Text;
using System.Collections;
using System.Collections.Generic;

namespace Legalsoft.Truffer.Algorithm
{
    public static partial class Algorithm_Gallery
    {
        public static List<int> Twentyone_Matchstick(int[] arr)
        {
            int N = arr.Length;
            List<int> list = new List<int>();
            for (int i = 0; i < N; i += 1)
            {
                list.Add(5 - arr[i]);
            }
            return list;
        }
    }
}

三、更多的火柴棍

当然可以设计更多火柴棍的游戏。

其基本原则是,假设火柴棍为 M+1 根 ,选择游戏限制为每次拿 1---N 根火柴。

M,N 应该有一个合适的 公约数!

POWER BY TRUFFER.CN

BY 315SOFT.COM

相关推荐
8Qi82 小时前
回文子串(Palindromic Substrings)—— 题解
算法·leetcode·职场和发展·动态规划
专注VB编程开发20年5 小时前
AI 生成C# WinForm 窗体 = 目前就是垃圾
开发语言·人工智能·c#
z落落6 小时前
C# 泛型接口和泛型类+泛型约束
开发语言·c#
阿正的梦工坊6 小时前
【Rust】08-集合类型、字符串与迭代器入门
开发语言·rust·c#
FuckPatience6 小时前
C# 使用泛型协变将派生类类型替换为基类类型
开发语言·c#
小宋加油啊6 小时前
机械臂抓取物体 PVN3D算法调研学习
学习·算法·3d
lqqjuly7 小时前
前沿算法深度解析(一)
算法
guygg887 小时前
C# 生成中间带 Logo 头像的二维码
开发语言·c#
小欣加油7 小时前
leetcode1926 迷宫中离入口最近的出口
数据结构·c++·算法·leetcode·职场和发展