#include <cstdio>
#include <cstdlib>
#include <vector> using namespace std; char tbl[] = {'S', 'H', 'C', 'D', 'J'}; void shuffle(vector<char> &card, vector<char> &rnd) {
int rlen= rnd.size();
vector<char> tmp(card.size(), );
for (int i=; i<rlen; i++) {
tmp[rnd[i]] = card[i];
}
card = tmp;
} void print_card(char card) {
printf("%c%d", tbl[card/], card % + );
} int main() {
int times = , r = ;
vector<char> rnd(, );
vector<char> card(, );
for (int i=; i<; i++) {
card[i] = i;
}
scanf("%d", &times);
for (int i=; i<; i++) {
scanf("%d", &r);
rnd[i] = r - ;
}
for (int i=; i<times; i++) {
shuffle(card, rnd);
}
print_card(card[]);
for (int i=; i<; i++) {
printf(" ");
print_card(card[i]);
}
return ;
}

一开始想复杂了以为要像算法导论里面提到的那样进行元素交换,那里是因为随机数列不能保证在一定范围内唯一(如果要得到这样的数列其实也可以,就相当于已经进行了一次洗牌)所以遍历数组时产生的随机数是多少就把当前元素和下标和当前随机数一致的元素对换。不过这里已经说了数列是不重复的就直接把元素放到对应的位置上即可。当然程序里可以不把单次shuffle写成一个函数,这样可以避免反复创建vector,只要使用一个临时vector即可,多执行几次swap来代替元素拷贝。

PAT 1042 Shuffling Machine的更多相关文章

  1. PAT 1042. Shuffling Machine (20)

    1042. Shuffling Machine (20) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue Shu ...

  2. PAT 1042 Shuffling Machine[难]

    1042 Shuffling Machine (20)(20 分) Shuffling is a procedure used to randomize a deck of playing cards ...

  3. pat 1042 Shuffling Machine(20 分)

    1042 Shuffling Machine(20 分) Shuffling is a procedure used to randomize a deck of playing cards. Bec ...

  4. PAT 1042 Shuffling Machine (20 分)

    1042 Shuffling Machine (20 分)   Shuffling is a procedure used to randomize a deck of playing cards. ...

  5. PAT (Advanced Level) Practice 1042 Shuffling Machine (20 分) 凌宸1642

    PAT (Advanced Level) Practice 1042 Shuffling Machine (20 分) 凌宸1642 题目描述: Shuffling is a procedure us ...

  6. PAT 甲级 1042 Shuffling Machine (20 分)(简单题)

    1042 Shuffling Machine (20 分)   Shuffling is a procedure used to randomize a deck of playing cards. ...

  7. PAT甲级——1042 Shuffling Machine

    1042 Shuffling Machine Shuffling is a procedure used to randomize a deck of playing cards. Because s ...

  8. 1042 Shuffling Machine (20 分)

    1042 Shuffling Machine (20 分) Shuffling is a procedure used to randomize a deck of playing cards. Be ...

  9. PAT 甲级 1042 Shuffling Machine

    https://pintia.cn/problem-sets/994805342720868352/problems/994805442671132672 Shuffling is a procedu ...

随机推荐

  1. JDK 5 ~ 10 新特性倾情整理!

    JDK 5 ~ 10 新特性倾情整理! 最近连 JDK11都在准备发布的路上了,大家都整明白了吗?也许现在大部分人还在用6-8,8的新特性都没用熟,9刚出不久,10-11就不用说了. 为了大家对JDK ...

  2. Kibana6.x.x源码结构分析笔记

  3. 洛谷 P2147 [SDOI2008]洞穴勘测 (线段树分治)

    题目链接 题解 早就想写线段树分治的题了. 对于每条边,它存在于一段时间 我们按时间来搞 我们可把一条边看做一条线段 我们可以模拟线段树操作,不断分治下去 把覆盖\(l-r\)这段时间的线段筛选出来, ...

  4. 2018年江西理工大学C语言程序设计竞赛(初级组)一

     C语言竞赛初级组第一.二场答案:https://www.cnblogs.com/xingkongyihao/p/10046918.html  A: 逆序对 时间限制: 1 s      内存限制:  ...

  5. C# 错误和异常

    Try,catch和finally语句组成 异常层次结构 部分异常属性: Message 类型:string 描述:含有解释异常原因的消息(只读) StackTrace 类型:string 描述:含有 ...

  6. JS中String()与.toString()的区别

    1..toString()可以将所有的的数据都转换为字符串,但是要排除null 和 undefined 例如将false转为字符串类型 <script> var str = false.t ...

  7. css垂直居中几种方法(二)

    方法1:table-cell .box1{ display: table-cell; vertical-align: middle; text-align: center; } <div cla ...

  8. 0前端 框架 库_千万别去碰js呀 混合APP_webAPP_美工 选有类型的语言,比如TypeScript

    常用知识点,技巧 添加库到本地: (举例 element-ui) 用npm命令行把包下载到本地 在电脑里找到资源文件,比如 C:\Users\XiaoCong\AppData\Roaming\npm\ ...

  9. 如何利用工具提高你的 Android 代码质量

    在这篇文章中,我将通过不同的自动化工具如CheckStyle,FindBugs,PMD以及Android Lint来介绍(如何)提高你的安卓代码质量.通过自动化的方式检查你的代码非常有用,尤其当你在一 ...

  10. oracle 基础知识(十一)----表空间结构

    一,逻辑结构图 二.tablespace 01,Oracle表空间 它是一个逻辑的概念,它在物理上是不存在的. 02,oracle 存储结构 03.表空间特性 一个数据库可以包含多个表空间,一个表空间 ...