C#,洗牌问题(Card Shuffle Problem)的算法与源代码

洗牌问题(Card Shuffle Problem)

洗牌问题(Card Shuffle Problem)的基本描述

你有 100 张牌,从 1 到 100。
你把它们分成 k 堆,然后按顺序收集回来。
例如,如果您将它们分成 4 堆,那么第一堆将包含编号为 1、5、9、…的卡片,
第四堆将包含编号为 4、8、12、…在收集您首先收集的卡片时,
将最后一堆从下往上翻,然后拿起第三堆,从下往上翻,将卡片放在第四堆的上面,以此类推。
下一轮,你将牌分发到另一组牌堆中,并以同样的方式收集(最后一堆先,第一堆后)。
如果我们有 10 张牌,并把它们分成 2 堆,
牌堆中的牌的顺序(从上到下)将是 9、7、5、3、1 和 10、8、6、4、2 我们翻转牌堆,
得到顺序 1、3、5、7、9 和 2、4、6、8、10 我们把第二堆放在底部,
第一堆放在顶部,得到一副牌 1、3、5、7、9、2、4, 6、8、10 给定回合数(m),
每回合的桩数(ki),你需要写一个程序,在最后一轮结束时从顶部找到第 n 张牌。

2 源程序

using System;
using System.Collections;
using System.Collections.Generic;

namespace Legalsoft.Truffer.Algorithm
{
    public static partial class Algorithm_Gallery
    {
        private static int CARDS = 100;

        private static void Current_Round(List<int> list, int totalPiles)
        {
            int i;

            List<List<int>> piles = new List<List<int>>();
            for (i = 0; i < totalPiles; i++)
            {
                piles.Add(new List<int>());
            }
            int j = 0;
            for (i = 0; i < CARDS; i++)
            {
                piles[j].Add(list[i]);
                j = (j + 1) % totalPiles;
            }

            int pileNo = 0;
            i = 0;
            j = 0;
            while (i < CARDS)
            {
                list.Insert(i, piles[pileNo][j]);
                j++;
                if (j >= piles[pileNo].Count)
                {
                    pileNo++;
                    j = 0;
                }
                i++;
            }
        }

        public static int Perform_Rounds(int[] piles, int rounds, int n)
        {
            List<int> list = new List<int>();
            for (int i = 1; i <= CARDS; i++)
            {
                list.Add(i);
            }
            for (int i = 0; i < rounds; i++)
            {
                Current_Round(list, piles[i]);
            }
            return list[n];
        }
    }
}

using System;
using System.Collections;
using System.Collections.Generic;

namespace Legalsoft.Truffer.Algorithm
{
    public static partial class Algorithm_Gallery
    {
        private static int CARDS = 100;

        private static void Current_Round(List<int> list, int totalPiles)
        {
            int i;

            List<List<int>> piles = new List<List<int>>();
            for (i = 0; i < totalPiles; i++)
            {
                piles.Add(new List<int>());
            }
            int j = 0;
            for (i = 0; i < CARDS; i++)
            {
                piles[j].Add(list[i]);
                j = (j + 1) % totalPiles;
            }

            int pileNo = 0;
            i = 0;
            j = 0;
            while (i < CARDS)
            {
                list.Insert(i, piles[pileNo][j]);
                j++;
                if (j >= piles[pileNo].Count)
                {
                    pileNo++;
                    j = 0;
                }
                i++;
            }
        }

        public static int Perform_Rounds(int[] piles, int rounds, int n)
        {
            List<int> list = new List<int>();
            for (int i = 1; i <= CARDS; i++)
            {
                list.Add(i);
            }
            for (int i = 0; i < rounds; i++)
            {
                Current_Round(list, piles[i]);
            }
            return list[n];
        }
    }
}
 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/399588.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

关于发送邮件时Reply Reply All和Forward的区别

我们发送邮件的时候总是会纠结到底是用回复&#xff0c;还是回复全部&#xff0c;还是转发。 回复- 仅回复发件人。 全部回复- 回复发件人和抄送/密件抄送的联系人。 转发- 将电子邮件的副本发送给其他收件人。 这几种情形分别在什么时候用呢&#xff1f; 回复 比如Alen给你…

【设计模式】23种设计模式笔记

设计模式分类 模板方法模式 核心就是设计一个部分抽象类。 这个类具有少量具体的方法&#xff0c;和大量抽象的方法&#xff0c;具体的方法是为外界提供服务的点&#xff0c;具体方法中定义了抽象方法的执行序列 装饰器模式 现在有一个对象A&#xff0c;希望A的a方法被修饰 …

浏览器缓存机制

浏览器缓存有先后顺序&#xff0c;总体分为以下四个方面&#xff1a; Memory Cache Service Worker Cache Disk Cache Push Cache 缓存位置 1. Memory Cache 内存中的缓存 优点&#xff1a; 浏览器会优先去命中的一种缓存 响应速度最快 缺点&#xff1a; 缓存时间短&#xf…

ABAP 导入Excel表示例程序

目录 ABAP 导入excel示例程序创建程序使用的结构上传下载模板 ABAP 导入excel示例程序 批量导入程序&#xff0c;需要使用到导入模板&#xff0c;首先需要创建程序&#xff0c;之后是需要创建excel导入模板&#xff0c;并且需要将excel导入模板上传到SAP系统里面&#xff0c;之…

Code-Audit(代码审计)习题记录

介绍&#xff1a; 自己懒得搭建靶场了&#xff0c;靶场地址是 GitHub - CHYbeta/Code-Audit-Challenges: Code-Audit-Challenges为了方便在公网练习&#xff0c;可以随地访问&#xff0c;本文所有的题目均来源于网站HSCSEC-Code Audit 1、习题一 题目内容如下&#xff1a; 1…

运行jar时提示缺少依赖的类

供应商丢过来一个jar&#xff0c;是用Java写的Windows桌面程序&#xff0c;运行jar时提示缺少依赖的类&#xff0c;一看就是打包没带依赖的库&#xff0c;下面是解决方法&#xff1a; 1、解压缩jar&#xff0c;查看 META-INF 目录下的 MANIFEST.MF&#xff0c;看看都引用了哪些…

FlinkCDC详解

1、FlinkCDC是什么 1.1 CDC是什么 CDC是Chanage Data Capture&#xff08;数据变更捕获&#xff09;的简称。其核心原理就是监测并捕获数据库的变动&#xff08;例如增删改&#xff09;&#xff0c;将这些变更按照发生顺序捕获&#xff0c;将捕获到的数据&#xff0c;写入数据…

Cesium for Unreal 从源码编译到应用——插件编译

一、安装环境 Unreal Engine 5.3 CMake 3.17.5 Microsoft Visual Studio 2019 二、源码准备 下载cesium-unreal-samples工程。 git clone https://github.com/CesiumGS/cesium-unreal-samples.git 然后在工程目录创建Plugins文件夹&#xff0c;并下载cesium-unreal工程。 …

演练纪实│同创永益助力中交财务公司成功开展灾备应急演练

12月26日同创永益协助中交财务公司顺利完成核心业务系统、高性能云平台等关键业务系统的子系统验证演练&#xff0c;以及模拟切换演练、同城灾备应急演练。 同创永益北方交付二组的同事在演练前与中交财务公司演练负责人紧密沟通&#xff0c;展现了出色的专业素养和团队协作能力…

Vue3学习——标签的ref属性

在HTML标签上&#xff0c;可以使用相同的ref名称&#xff0c;得到DOM元素ref放在组件上时&#xff0c;拿到的是组件实例&#xff08;组件defineExpose暴露谁&#xff0c;ref才可以看到谁&#xff09; <script setup lang"ts"> import RefPractice from /compo…

测试C#调用Emgucv读取并显示视频文件

微信公众号“CSharp编程大全”的文章《C# 视频播放》介绍了基于emgucv读取视频文件并播放的用法&#xff08;百度文章名没有找到对象的文章地址&#xff0c;有兴趣的可以在微信中搜索该公众号并查看文章具体内容&#xff09;&#xff0c;本文学习并测试Emgucv播放视频文件的基本…

拼多多关键字搜索API-通过关键字获取拼多多商品列表商品价格商品id商品链接

拼多多根据关键词取商品列表 API 返回值说明 item_search-根据关键词取商品列表 公共参数 请求地址: pinduoduo/item_search 名称类型必须描述keyString是调用key&#xff08;必须以GET方式拼接在URL中&#xff09;secretString是调用密钥api_nameString是API接口名称&…

Mysql系列之命令行登录、连接工具登录、数据库表常用命令

登录与常用命令 连接工具登录命令行登录数据库1、查看数据库2、指定数据库3、查看当前数据库4、建库语句 数据表1、查看数据表2、查看表结构信息3、查看建表语句4、建表语句 连接工具登录 首先下载mysql连接工具&#xff0c;解压后直接打开软件&#xff0c;按以下步骤操作&…

☀️将大华摄像头画面接入Unity 【2】配置Unity接监控画面

一、前言 上一篇咱们将大华摄像头接入到电脑上了&#xff0c;接下来准备接入到unity画面。 接入到监控就涉及到各种视频流的格式rtsp、rtmp、m3u8。 Unity里有一些播放视频流的插件&#xff0c;主要的就是AVPro Video 和 UMP等&#xff0c;这次我用的是UMP 最好使用2.0.3版本…

顺序表详解(SeqList)

本文使用C语言进行顺序表的代码实现。 博主将使用代码和相关知识相结合的方式进行讲解&#xff0c;简单易懂&#xff0c;懵懂的大学生一听就会~ 顺序表是一种线性表的存储结构&#xff0c;它将数据元素存储在一段连续的存储空间中&#xff0c;每个元素占据一个存储单元&#x…

VSCODE中使用Django处理后端data和data models

链接&#xff1a; Python and Django tutorial in Visual Studio Code MVC的理解 在实际的程序中采用MVC的方式进行任务拆分。 Model&#xff08;模型&#xff09;负责封装应用程序的数据和业务逻辑部分。Model包含数据结构&#xff0c;数据处理逻辑以及相关的操作方法&#…

Camunda和SpringBoot的兼容版本

官网 https://docs.camunda.org/manual/7.15/user-guide/spring-boot-integration/version-compatibility/ Camunda和SpringBoot的兼容版本

安达发|APS生产排程的多机台产线详解

在生产管理中&#xff0c;APS&#xff08;高级计划与排程&#xff09;系统它可以帮助企业实现生产过程的优化和效率提升。特别是在多机台产线的生产环境中&#xff0c;APS系统的作用更加明显。本文将详细解析APS生产排程的多机台产线&#xff0c;包括允许使用的最大设备数&…

ai数字仿真辩论主持人提升用户体验

Ai虚拟主持人是元宇宙和AI人工智能技术在播音主持行业的重要应用&#xff0c;AI虚拟主持人能极大提升新闻资讯内容的精准度&#xff0c;改变单一的播报形式。 首先&#xff0c;AI虚拟主持人极大地提升了节目的制作效率和灵活性。传统主持人需要花费大量时间进行彩排和录制&…

【JGit】分支管理实践

本文紧接【JGit】简述及学习资料整理。 以下梳理了使用 JGit 进行 Git 操作的实践 JGit实践 主函数 public static void main(String[] args) throws Exception {String localDir "D:\\tmp\\git-test\\";String gitUrl "http://192.168.181.1:3000/root/g…