自测-5 Shuffling Machine(附注释及关键内容翻译)

#include <stdio.h>
int main()
{
	int K;
	scanf("%d",&K);
	char type[5] = {'S','H','C','D','J'};//牌的种类 
	int card[54] = {0};//牌 
	int order[54] = {0};//待输入的顺序 
	int save[54] = {0};//转换时存牌用 
	
	for(int i=0; i<54; i++){
		scanf("%d",&order[i]);
		card[i] = i + 1;//将card初始化为1-54 
	}
	
	while(K != 0){
		for(int i=0; i<54; i++)
			save[order[i]-1] = card[i];//因为order是1-54,save下标与card一致,是0-53,所以order[i]-1 
		for(int i=0; i<54; i++)
			card[i] = save[i];//将储存的新顺序给card,以进行下一轮洗牌 
		K--;
	}//洗牌模块,执行K遍 
	
	for(int i=0; i<54; i++){
		printf("%c%d",type[(card[i]-1)/13] , card[i]-((card[i]-1)/13)*13);  //type同理要-1处理,再判断花色类型 
		if(i != 53)                                                        //牌是按照1-54储存,所以减去对应个数13再输出 
			printf(" ");
	}
}

一开始真是一头雾水 ,代码及注释如上

Shuffling is a procedure used to randomize a deck of playing cards. Because standard shuffling techniques are seen as weak, and in order to avoid "inside jobs" where employees collaborate with gamblers by performing inadequate shuffles, many casinos employ automatic shuffling machines. Your task is to simulate a shuffling machine.

The machine shuffles a deck of 54 cards according to a given random order and repeats for a given number of times. It is assumed that the initial status of a card deck is in the following order:

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

where "S" stands for "Spade", "H" for "Heart", "C" for "Club", "D" for "Diamond", and "J" for "Joker". A given order is a permutation of distinct integers in [1, 54]. If the number at the i-th position is j, it means to move the card from position i to position j. For example, suppose we only have 5 cards: S3, H5, C1, D13 and J2. Given a shuffling order {4, 2, 5, 3, 1}, the result will be: J2, H5, D13, S3, C1. If we are to repeat the shuffling again, the result will be: C1, H5, S3, J2, D13.

(如果在第i个位置(输入54个顺序数字的位置)的数字是j,那么将第i个位置(当前牌的位置)的牌移动到第j个位置。举例:假如有五张牌:S3, H5, C1, D13 ,J2。给定一个洗牌顺序{4,2,5,3,1},结果将是J2, H5, D13, S3, C1(第一个顺序值对应第一张牌S3,顺序值为4,那么就将S3从第一个位置移动到第4个位置,以此类推)。如果我们重复洗牌.....(顺序仍然是{4,2,5,3,1}不变)

Input Specification:

Each input file contains one test case. For each case, the first line contains a positive integer K (≤20) which is the number of repeat times. Then the next line contains the given order. All the numbers in a line are separated by a space.

Output Specification:

For each test case, print the shuffling results in one line. All the cards are separated by a space, and there must be no extra space at the end of the line.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值