洗牌牛客网

2023-11-16

链接:https://www.nowcoder.com/questionTerminal/5a0a2c7e431e4fbbbb1ff32ac6e8dfa0
来源:牛客网
 

洗牌在生活中十分常见,现在需要写一个程序模拟洗牌的过程。 现在需要洗2n张牌,从上到下依次是第1张,第2张,第3张一直到第2n张。首先,我们把这2n张牌分成两堆,左手拿着第1张到第n张(上半堆),右手拿着第n+1张到第2n张(下半堆)。接着就开始洗牌的过程,先放下右手的最后一张牌,再放下左手的最后一张牌,接着放下右手的倒数第二张牌,再放下左手的倒数第二张牌,直到最后放下左手的第一张牌。接着把牌合并起来就可以了。 例如有6张牌,最开始牌的序列是1,2,3,4,5,6。首先分成两组,左手拿着1,2,3;右手拿着4,5,6。在洗牌过程中按顺序放下了6,3,5,2,4,1。把这六张牌再次合成一组牌之后,我们按照从上往下的顺序看这组牌,就变成了序列1,4,2,5,3,6。 现在给出一个原始牌组,请输出这副牌洗牌k次之后从上往下的序列。

 

输入描述:

第一行一个数T(T ≤ 100),表示数据组数。对于每组数据,第一行两个数n,k(1 ≤ n,k ≤ 100),接下来一行有2n个数a1,a2,...,a2n(1 ≤ ai ≤ 1000000000)。表示原始牌组从上到下的序列。

输出描述:

对于每组数据,输出一行,最终的序列。数字之间用空格隔开,不要在行末输出多余的空格。

示例1

输入

3 3 1 1 2 3 4 5 6 3 2 1 2 3 4 5 6 2 2 1 1 1 1

输出

1 4 2 5 3 6 1 5 4 3 2 6 1 1 1 1

题目分析:

输入:
第一个数T就是我们要洗几副牌
第二个数为n 也就是每副牌个数的1/2
第三个数为k 即就是我们需要洗牌几次
之后的2*n个数为我们需要洗的牌
循环输入T对 n k以及牌的顺序
输出:
输出就是将我们刚才洗的T副牌顺序输出,牌与牌之间隔一个空格,末尾换行

3.解决思路:

根据题意分析洗牌前和洗牌后有什么不同

代码实现:

    public static void main(String[] args) {
        Scanner scanner=new Scanner(System.in);
        while (scanner.hasNext()){
            int m=scanner.nextInt();
            while (m!=0){
                int n=scanner.nextInt();
                int k=scanner.nextInt();
                int[] arr=new int[2*n];
//                计算下标
                for (int i=0;i<2*n;i++){
                    int temp=i;
                    for (int j=0;j<k;j++){
                        if (temp<n){
                            temp=2*temp;
                        }else {
                            temp=2*(temp-n)+1;
                        }
                    }
                    // temp为元素经历k次之后的下标
                    arr[temp]=scanner.nextInt();
//                    输出
                }
                for (int i=0;i<2*n;i++){
                    if (i==2*n-1){
                        System.out.print(arr[i]);
                    }else {
                        System.out.print(arr[i]+" ");
                    }
                }
                System.out.println();
                m--;
            }
        }
    }

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

洗牌牛客网 的相关文章

随机推荐

  • 代码随想录 - Day35 - 回溯:重新安排行程,棋盘问题

    代码随想录 Day35 回溯 重新安排行程 棋盘问题 332 重新安排行程 输入 tickets JFK SFO JFK ATL SFO ATL ATL JFK ATL SFO 输出 JFK ATL JFK SFO ATL SFO 解释 另
  • 什么是「穷人思维」?

    https www zhihu com question 26980862
  • forEach

    function sum args let s 0 args forEach item gt s item
  • 四种解决”Argument list too long”参数列表过长的办法

    四种解决 Argument list too long 参数列表过长的办法 转自 http hi baidu com cpuramdisk item 5aa49ce00c0757aecf2d4f24 在linux中删除大量文件时 直接用rm
  • 调试web项目时Chrome浏览器发送两次请求

    最近调试web项目时 项目有时候会因为接收到空值而报错 之后我发现是因为Chrome浏览器会连续发送2次请求导致 在使用Edge浏览器则没有出现这个问题 遂搜索了一些解决方案如下 https blog csdn net weixin 390
  • Relational Knowledge Distillation解读

    Relational Knowledge Distillation解读 Relational Knowledge Distillation Title Summary Research Objective Problem Statement
  • 图形学相关期刊和会议的基本信息

    目录 期刊 A类 ACM TOG A类 IEEE TIP A类 IEEE TVCG B类 TOMCCAP B类 CAGD B类 CGF B类 CAD B类 GM B类 TCSVT B类 TMM B类 SIIMS C类 CGTA C类 CAV
  • GDB -- 多线程堆栈

    1 死机后 输入 info threads 查看所有thread信息 2 thread apply all bt 显示所有的线程堆栈 示例 gdb info threads Id Target Id Frame 3 Thread 0xb77
  • html写了外部样式表,外部样式表怎么写

    1 css内部样式表怎么写 1 创建使用css样式表有三种 分别是外部样式表 内部样式表和内联样式 下面通过一个小demo演示它们的用法 首先新建一个html文件 放入3个button按钮 给前两个按钮分百别设置class属性为btn1和b
  • spring中的设计模式

    转自 http ylsun1113 iteye com blog 828542 我对设计模式的理解 应该说设计模式是我们在写代码时候的一种被承认的较好的模式 就像一种宗教信仰一样 大多数人承认的时候 你就要跟随 如果你想当一个社会存在的话
  • 11. Container With Most Water

    Given n non negative integers a1 a2 an where each represents a point at coordinate i ai n vertical lines are drawn such
  • ESP32C3解锁使用IO11

    目录 1 使用pip安装esptool 2 安装idf开发命令行环境 可参考 3 将开发板插入电脑 4 打开IDF CMD命令行 5 打开命令行窗口 源自官方wiki 本篇介绍如何给ESP32C3多释放一个io ESP32C3的GPIO11
  • 如何从JavaScript数组中获取多个随机唯一元素?

    The JavaScript is a very versatile language and it has a function almost everything that you want JavaScript是一种非常通用的语言 它
  • Everything使用攻略和技巧

    Everything使用技巧 www hi channel com出品本文为H4海畅智慧原创文章 未经允许不得进行商业盈利性转载 非盈利性商业转载请注明出处www hi channel com 1 Everything下载地址 http w
  • access和tagware_通信缩略语

    英文缩写 英文名称 中文名称 3G The third generation mobile communications 第 3 代 移动通信 3GPP2 3rd Generation Partnership Project 2 3G 协作
  • 在论文开题报告中,研究目的和研究意义两者之间有什么区别吗?

    相信很多同学在接触论文的时候 会分不清研究目的和研究意义两者之间有什么区别 别着急 通过对大量文献的分析并根据数位研究生导师的讲解 这里总结出一篇针对二者区别的详细解读 全文大约有2000字 利用理论和实例全方位为大家解惑 选题的目的和意义
  • 【Spring Boot 集成应用】Spring Boot Admin的集成配置使用

    1 Spring Boot Admin 简介 Spring Boot Admin是一个开源社区项目 用于管理和监控SpringBoot应用程序 每个应用都认为是一个客户端 通过 HTTP 或者使用 Eureka 注册到 admin serv
  • 数字图像处理第十一章

    表示和描述 由于本章注重于如何存储 以后学习过程中多半不会用到该章节的知识 因此本章只做大概介绍 不再使用代码进一步说明 将一幅图像分割成多个区域后 分割后的像素集需要以一种合适于计算机进一步处理的形式来表示和描述 表示 表示一个区域的两种
  • sql2008计算机环境,win2008r2下安装sql2008r2初版

    步骤一 安装前的准备 软件要求 1 SQL Server 安装程序安装该产品所需的以下软件组件 NET Framework 3 5 SP11 SQL Server Native Client SQL Server 安装程序支持文件 2 所有
  • 洗牌牛客网

    链接 https www nowcoder com questionTerminal 5a0a2c7e431e4fbbbb1ff32ac6e8dfa0 来源 牛客网 洗牌在生活中十分常见 现在需要写一个程序模拟洗牌的过程 现在需要洗2n张牌