1042 Shuffling Machine (20分)[模拟]

By Jalan

知识工具需求

数学

数据结构和算法

语言

题干

模仿洗牌机
初始的状态如下

S1, S2, ..., S13, 
H1, H2, ..., H13, 
C1, C2, ..., C13, 
D1, D2, ..., D13, 
J1, J2

给一个数组,第i位的值是j代表吧第i位的值移动到第j位去.(1-n)

输入条件

K<=20是重复次数,下面一行是给定的洗牌序列.

输出条件

输出结果,末尾不能有空格

例子

例1

输入
2
36 52 37 38 3 39 40 53 54 41 11 12 13 42 43 44 2 4 23 24 25 26 27 6 7 8 48 49 50 51 9 10 14 15 16 5 17 18 19 1 20 21 22 28 29 30 31 32 33 34 35 45 46 47
输出
S7 C11 C10 C12 S1 H7 H8 H9 D8 D9 S11 S12 S13 D10 D11 D12 S3 S4 S6 S10 H1 H2 C13 D2 D3 D4 H6 H3 D13 J1 J2 C1 C2 C3 C4 D1 S5 H5 H11 H12 C6 C7 C8 C9 S2 S8 S9 H10 D5 D6 D7 H4 H13 C5

题解

第一次

思路

  1. 创建初始数组origin,把值加密成1-53
  2. 输入洗牌数组shuffle.创建洗牌结果数组result
  3. 创建洗牌函数shuffleFunction每次洗牌把结果填充到result里,然后把result赋值给orign重复调用
  4. 输出

预期时间复杂度

K*53

编写用时

24分钟,今天第一题,快的话应该14分钟就能写完,

代码

CPP
#include <bits/stdc++.h>
#include <stdio.h>
#include <vector>
using namespace std;
void shuffleFunction(vector<int> &a, vector<int> &b, vector<int> shuffle)
{
    for (int i = 1; i < 55; i++)
    {
        b[shuffle[i]] = a[i];
    }
    a = b;
}
int main(int argc, char const *argv[])
{
    //1
    vector<int> origin(55);
    for (int i = 0; i < 55; i++)
    {
        origin[i] = i;
    }
    //2
    int K;
    scanf("%d", &K);
    vector<int> shuffle(55);
    for (int i = 1; i < 55; i++)
    {
        scanf("%d", &shuffle[i]);
    }
    vector<int> result(55);
    //3
    for (int i = 0; i < K; i++)
    {
        shuffleFunction(origin, result, shuffle);
    }
    //4
    for (int i = 1; i < 55; i++)
    {
        int temp = result[i];
        if (temp <= 13)
        {
            printf("S%d", temp);
        }else if (temp<=26) {
            printf("H%d",temp-13);
        }else if (temp<=39) {
            printf("C%d",temp-26);
        }else if (temp<=52) {
            printf("D%d",temp-39);
        }else if (temp==53) {
            printf("J1");
        }else if (temp==54) {
            printf("J2");
        }
        if (i!=54)
        {
            printf(" ");
        }

    }

    return 0;
}

运行用时

在这里插入图片描述

结尾

看在我写了这么多注释的份上可以给我点个赞嘛,求求惹=]砰砰砰,给我加点写下去的油呀@.@
也欢迎关注我的CSDN账号呀,接下来两个月我应该会按这个格式更新所有的PTA甲级题目

                                        **开心code每一天**
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值