題目鏈接:https://pintia.cn/problem-sets/994805342720868352/problems/994805442671132672
題目大意:有54張牌,編號1-54,從小到大排序。這些牌按初始排列給定花色,從左到右,13張S,13張H,13張C,13張D,兩張J
接下來執行一種操作,這種操作將牌的位置改變爲制定位置,操作執行K次。
分析:用兩個數組start[ ],end[ ],一個記錄操作開始前的情況,一個記錄操作後的情況,每次操作完,用end 覆蓋 start。
代碼:
#include<iostream>
#include<cstdio>
using namespace std;
#include<algorithm>
#include<cmath>
#include<set>
#include<map>
#include<string>
#include<cstring>
#include<vector>
#include<cstdlib>
#define ll long long int
char mp[5]={'S','H','C','D','J'};
int main()
{
int n;
cin>>n;
int start[55],next[55],end[55];
for(int i=1;i<=54;i++)
start[i]=i;
for(int i=1;i<=54;i++) //next 儲存操作
cin>>next[i];
for(int i=1;i<=n;i++){
for(int j=1;j<=54;j++){
end[next[j]]=start[j];
}
for(int k=1;k<=54;k++) //覆蓋
start[k]=end[k];
}
for(int i=1;i<=54;i++)
{
start[i]--; //這裏start-1,是因爲,當start=13時,是可以被13整除的,之後加+1就有錯誤
printf("%c%d",mp[start[i]/13],start[i]%13+1);
if(i<54) printf(" ");
}
return 0;
}