文档章节

扑克牌移位和旋转

时间变
 时间变
发布于 2013/12/30 16:43
字数 645
阅读 70
收藏 0
点赞 0
评论 0

问题:

  •  对于一副扑克牌,我们有多种不同的洗牌方式。一种方法是从中间某个位置分成两半,然后相交换,我们称之为移位(shift)。比如原来的次序是123456,从第4个位置交换,结果就是561234。这个方式其实就是数组的循环移位,为了多次进行这个操作,必须使用一种尽可能快的方法来编程实现。在本题目中,还引入另外一种洗牌方式,就是把前一半(如果总数是奇数,就是(n-1)/2)牌翻转过来,这种操作称之为翻转(flip)。在前面shift操作的结果上进行flip,结果就是165234。当然,如果是实际的扑克牌,直接翻转会造成正反面混在一起的,我们就不管那么多了。
            给定n张牌,初始次序为从1到n,经过若干次的shift和flip操作后,结果会是什么样?

  • 输入:

  • 输入包括多组测试数据,每组数据的第一行包括两个数 n和k。n表示牌的数目,1<n<1000,如果n为0表示输入结束,k表示下面要进行的操作数量。随后的k行,每行一个整数x,1<=x<=n,表示从第几个位置开始移位。在每一次shift操作后都接一个flip操作。

  • 输出:

  • 对于输入的每组数据,计算经过给定的k次shift和flip操作后,各个位置的数值。并按次序在一行上输出所有牌张的值,每个数值(包括最后一个)后面有一个空格。

  • 样例输入:

  • 6 1
    4
    0 0
  • 样例输出:

  • 1 6 5 2 3 4

时间限制:1秒          内存限制:128M

 

我的代码,用C语言编写,耗时10MS 内存912kb

#include <stdio.h>
#include <stdlib.h>
 
void swap(int *a, int *b)
{
    int tmp = *a;
    *a =  *b;
    *b = tmp;
}
 
int *fun(int *begin, int *end)
{
    int *re = begin;
    while(begin <= end)
    {
        swap(begin,end);
        begin++;
        end--;
    }
 
return re;
}
 
void fun3(int *data, int n, int p)
{
    int *re = fun(data, data+n-1);
    int *b1 = re;
    int *e1 = re+(n-p)-1;
    int *re1 = fun(b1,e1);
 
    int *b2 = e1 + 1;
    int *e2 = b2+p-1;
    int *re2 = fun(b2,e2);
 
    int *b3 = re1;
    int *e3 = re1+n/2-1;
    int *re3 = fun(b3,e3);
}
 
int main()
{
    int n,m,p;
    int *data;
    while(1)
    {
        scanf("%d %d", &n, &m);
        if(0 == n)
            break;
        else
        {
            data = (int*)malloc(sizeof(int)*n);
            int i;
            for(i = 0; i < n; i++)
                data[i] = i + 1;
            for(i = 0; i < m; i++)
            {
                   scanf("%d",&p);
                   fun3(data,n,p);
            }
            for(i = 0; i < n; i++)
                  printf("%d ", data[i]);
 
            printf("\n");
 
              free(data);
        }
    }
 
return 0;
}

© 著作权归作者所有

共有 人打赏支持
时间变
粉丝 14
博文 3
码字总数 1701
作品 0
海淀
程序员
2.5d 游戏开发引擎--IndieLib

IndieLib是一个 2.5d引擎,使用它可以简化游戏开发的难度,提高游戏开发的速度。内部它使用Direct3d做硬件加速,但它并没有使用DirectDraw或者 ID3DXSprite,而是直接将材质渲染在多边形上。...

匿名 ⋅ 2012/03/31 ⋅ 0

6- OpenCV+TensorFlow 入门人工智能图像处理-图片移位

图片移位 opencvAPI实现 算法原理 源代码实现 原始图片和移位后图片 图片位移的算法原理 分析api实现原理 分析像素移动实现原理 偏移矩阵 完成矩阵的运算 输入的xy定义为C 结果: (10,20)->(1...

天涯明月笙 ⋅ 05/05 ⋅ 0

OpenGL绘图老出现系统自己继承之类的问题,求解

平台VC++;系统WIN7 glRotatef(Rx,0.01f,0.0f,0.0f); glBegin(GLLINELOOP); glColor3f(0.5,1.0,0.3); glVertex2f(0.0,0.3); glVertex2f(-0.5,0.05); glVertex2f(0.5,0.05); glEnd(); glBegin......

秦风韵 ⋅ 2013/03/19 ⋅ 3

Lintcode39 Recover Rotated Sorted Array solution 题解

【题目描述】 Given a rotated sorted array, recover it to sorted array in-place. 给定一个旋转排序数组,在原地恢复其排序。 【题目链接】 http://www.lintcode.com/en/problem/recover...

abcdd1234567890 ⋅ 2017/06/23 ⋅ 0

Aspose.Imaging for .NET 2.1.0 发布

Aspose.Imaging for .NET 2.1.0 发布,该版本增强对 DXF AutoCAD 2010 文件格式转成 PDF 格式的功能,支持旋转的 MTEXT 移位以及分离 MTEXT 特殊符号;改进 TIFF 编码器;可加载和操作 CIEL...

oschina ⋅ 2013/11/24 ⋅ 0

位图点阵90度翻转算法

算法说明 将原始位图点阵分割成8*8的小块,则该小块各种组合值恰好可以使用64位完全表示,即横向8个点可以使用一个字节表示,纵向8行则即8字节。 对于逆时针旋转90°,源点阵第一行旋转后(一...

ccyuan ⋅ 2016/08/28 ⋅ 0

[翻译]PyCairo指南--变换

变换 PyCairo 图形学编程指南的这个部分,我们将讨论变换。 一个仿射变换由0个或者多个线性变换(旋转,放缩或切变)和平移(移位)组成。一些线性变换可以被结合起来放进一个单一的矩阵中。一个...

WolfCS ⋅ 2013/05/25 ⋅ 0

opencv LBP特征与行人识别

一、话说LBP特征 局部二值模式(Local Binary Pattern, LBP)是一种有效的纹理描述算子,它具有旋转不变性和灰度不变性的显著的有点。已经广泛的应用于纹理分类、纹理分割、人脸图像分析等领...

zhangjunp3 ⋅ 04/20 ⋅ 0

神奇的德布鲁因序列

数学中存在这样一个序列,它充满魔力,在实际工程中也有一部分的应用。今天就打算分享一下这个序列,它在 Google S2 中是如何使用的以及它在图论中,其他领域中的应用。这个序列就是德布鲁因...

一缕殇流化隐半边冰霜 ⋅ 2017/11/03 ⋅ 0

大妈也能看懂的大数据分布式计算图解

作者介绍 卢亮,资深软件研发工程师,擅长业务系统建模与架构分析,在分布式架构和大数据技术方面有深入的理论研究和实践经验。 个人博客:www.leonlu.cc 本文是一篇科普性质的文章,希望能通...

卢亮 ⋅ 05/24 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

JavaScript零基础入门——(八)JavaScript的数组

JavaScript零基础入门——(八)JavaScript的数组 欢迎大家回到我们的JavaScript零基础入门,上一节课我们讲了有关JavaScript正则表达式的相关知识点,便于大家更好的对字符串进行处理。这一...

JandenMa ⋅ 今天 ⋅ 0

sbt网络问题解决方案

转自:http://dblab.xmu.edu.cn/blog/maven-network-problem/ cd ~/.sbt/launchers/0.13.9unzip -q ./sbt-launch.jar 修改 vi sbt/sbt.boot.properties 增加一个oschina库地址: [reposit......

狐狸老侠 ⋅ 今天 ⋅ 0

大数据,必须掌握的10项顶级安全技术

我们看到越来越多的数据泄漏事故、勒索软件和其他类型的网络攻击,这使得安全成为一个热门话题。 去年,企业IT面临的威胁仍然处于非常高的水平,每天都会看到媒体报道大量数据泄漏事故和攻击...

p柯西 ⋅ 今天 ⋅ 0

Linux下安装配置Hadoop2.7.6

前提 安装jdk 下载 wget http://mirrors.hust.edu.cn/apache/hadoop/common/hadoop-2.7.6/hadoop-2.7.6.tar.gz 解压 配置 vim /etc/profile # 配置java环境变量 export JAVA_HOME=/opt/jdk1......

晨猫 ⋅ 今天 ⋅ 0

crontab工具介绍

crontab crontab 是一个用于设置周期性被执行的任务工具。 周期性执行的任务列表称为Cron Table crontab(选项)(参数) -e:编辑该用户的计时器设置; -l:列出该用户的计时器设置; -r:删除该...

Linux学习笔记 ⋅ 今天 ⋅ 0

深入Java多线程——Java内存模型深入(2)

5. final域的内存语义 5.1 final域的重排序规则 1.对于final域,编译器和处理器要遵守两个重排序规则: (1)在构造函数内对一个final域的写入,与随后把这个被构造对象的引用赋值给一个引用...

江左煤郎 ⋅ 今天 ⋅ 0

面试-正向代理和反向代理

面试-正向代理和反向代理 Nginx 是一个高性能的反向代理服务器,但同时也支持正向代理方式的配置。

秋日芒草 ⋅ 今天 ⋅ 0

Spring 依赖注入(DI)

1、Setter方法注入: 通过设置方法注入依赖。这种方法既简单又常用。 类中定义set()方法: public class HelloWorldOutput{ HelloWorld helloWorld; public void setHelloWorld...

霍淇滨 ⋅ 昨天 ⋅ 0

马氏距离与欧氏距离

马氏距离 马氏距离也可以定义为两个服从同一分布并且其协方差矩阵为Σ的随机变量之间的差异程度。 如果协方差矩阵为单位矩阵,那么马氏距离就简化为欧氏距离,如果协方差矩阵为对角阵,则其也...

漫步当下 ⋅ 昨天 ⋅ 0

聊聊spring cloud的RequestRateLimiterGatewayFilter

序 本文主要研究一下spring cloud的RequestRateLimiterGatewayFilter GatewayAutoConfiguration @Configuration@ConditionalOnProperty(name = "spring.cloud.gateway.enabled", matchIfMi......

go4it ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部