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

相关推荐
唐宋元明清21882 小时前
.NET 本地Db数据库-技术方案选型
windows·c#
lindexi4 小时前
dotnet DirectX 通过可等待交换链降低输入渲染延迟
c#·directx·d2d·direct2d·vortice
ZPC82104 小时前
docker 镜像备份
人工智能·算法·fpga开发·机器人
ZPC82104 小时前
docker 使用GUI ROS2
人工智能·算法·fpga开发·机器人
琢磨先生David4 小时前
Day1:基础入门·两数之和(LeetCode 1)
数据结构·算法·leetcode
颜酱4 小时前
栈的经典应用:从基础到进阶,解决LeetCode高频栈类问题
javascript·后端·算法
多恩Stone4 小时前
【C++入门扫盲1】C++ 与 Python:类型、编译器/解释器与 CPU 的关系
开发语言·c++·人工智能·python·算法·3d·aigc
生信大杂烩4 小时前
癌症中的“细胞邻域“:解码肿瘤微环境的空间密码 ——Nature Cancer 综述解读
人工智能·算法
蜡笔小马5 小时前
21.Boost.Geometry disjoint、distance、envelope、equals、expand和for_each算法接口详解
c++·算法·boost
m0_531237175 小时前
C语言-数组练习进阶
c语言·开发语言·算法