1042 Shuffling Machine (20 分)简洁易懂,无需繁琐操作数组

1042 Shuffling Machine题解

因为每一趟的顺序改变,都只是下标的改变,其值不会发生变换,以空间换时间

1、把下标值index和card的值存放在一个结构体中
2、每一趟将结构体中的index更新
3、以index从小到大的顺序 sort()结构体
4、重复第一步,操作次数为k
#include <iostream>
#include <algorithm>
#include <string.h>
using namespace std;


int order[54];

struct node
{
    int v;
    int pos;
}card[54];

bool cmp(node a,node b)
{
    return a.pos<b.pos;
}

string getName(int v)
{
    if (v <= 13)
        return "S" + to_string(v);
    if (v <= 26)
        return "H" + to_string(v-13);
    if (v <= 39)
        return "C" + to_string(v-26);
    if (v <= 52)
        return "D" + to_string(v-39);
    if (v == 53)
        return "J1";
    return "J2";
}

int main(int argc, const char * argv[]) {
    int k;
    cin>>k;
    for (int i=0; i<54; i++)
    {
        cin>>order[i];
        card[i].pos = i+1;
        card[i].v = i+1;
    }
    while (k--)
    {
        for (int i=0; i<54; i++)
            card[i].pos = order[i];
        sort(card, card+54, cmp);
    }
    
    cout<<getName(card[0].v);
    for (int i=1; i<54; i++)
        cout<<" "<<getName(card[i].v);
    return 0;
}

最后贴一个运行测试点结果截图

在这里插入图片描述

第一次写博客,哈哈哈哈哈哈哈,希望以后自己都会养成写博客的好习惯(狗头)


版权声明:本文为yunshen2711原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。