[PAT解题报告] Shuffling Machine
简单题,给定54张牌,每个数代表一张牌,然后有一种操作关系,每次操作告诉你把现在第i张牌放在第j=p[i]个位置,这样不断操作k次,问最终结果。直接模拟即可,注意点主要就是最后要把数字还原成牌的表示。而且k不大,直接循环操作即可。
代码:
#include <cstdio>
#include <string>
#include <cstring>
using namespace std;
const char *c = "SHCD";
char temp[54][4], card[54][4];
int a[54];
int main() {
int n = 0;
for (int i = 0; i < 4; ++i) {
for (int j = 0; j < 13; ++j) {
sprintf(card[n++], "%c%d",c[i],j + 1);
}
}
strcpy(card[52], "J1");
strcpy(card[53], "J2");
scanf("%d",&n);
for (int i = 0; i < 54; ++i) {
scanf("%d",a + i);
}
while (n--) {
for (int i = 0; i < 54; ++i) {
strcpy(temp[a[i] - 1], card[i]);
}
for (int i = 0; i < 54; ++i) {
strcpy(card[i], temp[i]);
}
}
for (int i = 0; i < 54; ++i) {
if (i) {
putchar(' ');
}
printf("%s",card[i]);
}
puts("");
return 0;
}
原题连接: http://www.patest.cn/contests/pat-a-practise/1042