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

news2024/11/23 3:34:16

洗牌问题(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];
        }
    }
}
 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Android T 远程动画显示流程其二——动画的添加流程(更新中)

前言 接着上篇文章分析 Android T 远程动画显示流程其一 切入点——处理应用的显示过渡 下面&#xff0c;我们以从桌面点击一个应用启动的场景来分析远程动画的流程&#xff0c;窗口添加的流程见Android T WMS窗口相关流程 这里我们从AppTransitionController.handleAppTran…

Latent Diffusion Models / Stable Diffusion(LDM)

High-Resolution Image Synthesis with Latent Diffusion Models&#xff08;CVPR 2022&#xff09;https://arxiv.org/abs/2112.10752latent-diffusionstable-diffusion cross-attention&#xff08;用于多模态任务&#xff09; Cross-attention vs Self-attention&#xff…

外汇天眼:交易讲究时机,不要在这几个时间交易

每个交易者都想知道&#xff0c;什么时候是入场买卖的最好时机。 到底是1.1800入场呢&#xff1f; 还是等到1.1900&#xff1f; 但是&#xff0c;交易中不仅仅是关于从哪里入场&#xff0c;同样的&#xff0c;知道什么时候不去交易也是非常重要的。 这听起来像是一回事&#x…

python coding with ChatGPT 打卡第21天| 二叉树:最近公共祖先

相关推荐 python coding with ChatGPT 打卡第12天| 二叉树&#xff1a;理论基础 python coding with ChatGPT 打卡第13天| 二叉树的深度优先遍历 python coding with ChatGPT 打卡第14天| 二叉树的广度优先遍历 python coding with ChatGPT 打卡第15天| 二叉树&#xff1a;翻转…

网络原理 - HTTP/HTTPS(4)

HTTP响应详解 认识"状态码"(status code) 状态码表示访问一个页面的结果.(是访问成功,还是失败,还是其它的一些情况...).(响应结果如何) 学习状态码 -> 为了调试问题. 写服务器时,按照状态码的含义正确使用. 200 OK 这是最常见的状态码,表示访问成功. 抓包抓…

超详细!三款内衣洗衣机PK评测,希亦、觉飞、由利谁更胜一筹?

内衣裤作为我们日常必备的贴身衣物&#xff0c;所以对卫生方面的要求也比较高&#xff0c;但对许多人们而言&#xff0c;对内衣裤进行清洗是一项相当繁琐的事情&#xff0c;主要是因为并不能直接把内衣裤放入大型洗衣机里和其它衣服混合洗&#xff0c;所以大多数用户都会自己动…

不止于框架:全面深入Spring MVC,成就开发高手

介绍&#xff1a;Spring MVC是一个基于Java的轻量级Web框架&#xff0c;它实现了MVC&#xff08;Model-View-Controller&#xff09;设计模式。以下是对Spring MVC的详细介绍&#xff1a; MVC架构模式&#xff1a;Spring MVC遵循MVC架构模式的思想&#xff0c;将应用程序分为模…

几个常见的C/C++语言冷知识

当涉及到C/C语言时&#xff0c;有一些冷知识可能并不为人所熟知&#xff0c;但却可以让你更深入地理解这门古老而强大的编程语言。以下是一些有趣的C/C语言冷知识。 1. 数组的下标可以是负数 在我们日常的C语言编程中&#xff0c;数组是一个非常常见的数据结构。我们习惯性地使…

CSS 函数详解url、min、rgb、blur、scale、rotate、translate等

随着技术的不断进步&#xff0c;CSS 已经从简单的样式表发展成为拥有众多内置函数的强大工具。这些函数不仅增强了开发者的设计能力&#xff0c;还使得样式应用更加动态、灵活和响应式。本文将深入探讨 CSS 常见的 66 个函数&#xff0c;逐一剖析它们的功能和用法&#xff0c;一…

Linux目录:scp命令

目录 1 scp命令1.1简介1.2命令说明1.3 实例1、从本地复制的远程2、从远程复制到本地3、-r&#xff1a;复制目录4、 -p&#xff1a;保留原文件的修改时间&#xff0c;访问时间5、-P&#xff1a;指定传输数据的端口6、扩展&#xff1a;修改ssh默认端口 1 scp命令 1.1简介 scp 是…

如何在Shopee平台上选择爆款商品:借鉴爆款属性的有效策略

在当今激烈竞争的电商市场中&#xff0c;想要在Shopee平台上取得成功&#xff0c;卖家需要精心选择潜在的热销产品。借鉴爆款商品的属性是一种行之有效的策略&#xff0c;能够帮助卖家快速找到市场上的热门商品。通过分析市场趋势、竞品表现、社交媒体趋势等多方面因素&#xf…

单片机学习笔记---红外遥控(外部中断)

目录 红外遥控简介 硬件电路 基本发送与接收 NEC编码​​​​​​​ 遥控器键码 复习外部中断和定时器 红外遥控简介 红外遥控是利用红外光进行通信的设备&#xff0c;由红外LED将调制后的信号发出&#xff0c;由专用的红外接收头进行解调输出 通信方式&#xff1a;单工…

String字符串,FastJson常用操作方法

JSON字符串操作 1、创建配置环境 # 引入测试包testImplementation group: org.springframework.boot, name: spring-boot-starter-test, version: 2.2.6.RELEASE # 创建测试类RunWith(SpringRunner.class)SpringBootTestpublic class JsonTest {Testpublic void test(){Syste…

13.Qt 文件的读和写,样式表文件的读用

目录 前言&#xff1a; 技能&#xff1a; 内容&#xff1a; 1. 界面 2.信号槽 ①浏览按键 ②保存按键 ③加载样式按键 参考&#xff1a; 前言&#xff1a; 上一篇文章说明了如何弹窗选取文件并在Qlabel中显示文件内容 12.QT文件对话框 文件的弹窗选择-QFileDialog 这篇…

Gitlab CI 报错: /usr/bin/bash: line 137: kubectl: command not found

天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物。 每个人都有惰性&#xff0c;但不断学习是好好生活的根本&#xff0c;共勉&#xff01; 文章均为学习整理笔记&#xff0c;分享记录为主&#xff0c;如有错误请指正&#xff0c;共同学习进步。…

【 Maven 】花式玩法之多模块项目

目录 一、认识Maven多模块项目 二、maven如何定义项目的发布策略 2.1 版本管理 2.2 构建配置 2.3 部署和发布 2.4 依赖管理 2.5 发布流程 三、使用Jenkins持续集成Maven项目 四、总结 如果你有一个多模块项目&#xff0c;并且想将这些模块发布到不同的仓库或目标位置&…

机器学习基础(四)非监督学习的进阶探索

导语&#xff1a;上一节我们详细探索监督学习的进阶应用&#xff0c;详情可见&#xff1a; 机器学习基础&#xff08;三&#xff09;监督学习的进阶探索-CSDN博客文章浏览阅读296次&#xff0c;点赞13次&#xff0c;收藏11次。监督学习作为机器学习的一个主要分支&#xff0c;…

34.仿简道云公式函数实战-数学函数-PRODUCT

1. PRODUCT函数 函数使所有以参数形式给出的数字相乘并返回乘积。 2. 函数用法 PRODUCT(number1, [number2], …) 3. 函数示例 PRODUCT(数量, 单价) 4. 代码实战 首先我们在function包下创建math包&#xff0c;在math包下创建ProductFunction类&#xff0c;代码如下&…

x86与arm架构区别

前言 我们经常讨论的芯片的X86架构和ARM架构&#xff0c;那么他们的的区别什么呢&#xff1f;其实俩种都是主流的两种计算机处理器架构&#xff08;CPU&#xff09;架构&#xff0c;X86架构的CPU是PC服务器行业的老大&#xff0c;ARM架构的CPU则是移动端的老大。X86架构和arm架…

如何在Shopee 上选择热销商品?shopee应该在哪选品

在如今激烈竞争的电商市场中&#xff0c;如何通过精准的选品策略提升在Shopee平台上的销售业绩成为卖家们关注的焦点。Shopee作为一个蓬勃发展的电商平台&#xff0c;提供了多种资源和工具来帮助卖家做出明智的选品决策。通过深入了解这些渠道和策略&#xff0c;卖家们可以更好…