A1042.Shuffling Machine(20)

本文介绍了一种基于数组操作的牌类游戏洗牌算法,通过输入每张牌的新位置来模拟洗牌过程,并实现了特定次数后的牌序输出。文章讨论了不同输入格式的处理方法及如何使用char和int数组结合表示牌面。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include<cstdio> 
const int N=5;
char mp[5]={'S','H','C','D','J'};//牌的编号与花色对应关系 
int start[N+1],end[N+1],next[N+1];//next数组存放每个位置上的牌在操作后的位置

int main(){
	int K;
	scanf("%d",&K);
	for(int i = 1; i <= N; i++){
		start[i]=i;//初始化编号 
	}
	for(int i = 1; i <= N; i++){
		scanf("%d",&next[i]);//输入每个位置上的牌在操作后的位置 
	}
	for(int step = 0; step < K; step++){//执行K次操作 
		for(int i = 1; i <= N; i++){
			end[next[i]]=start[i];//把第i个位置的牌的编号存于位置next[i] 
		}
		for(int i = 1; i <= N; i++){
			start[i] = end[i];//把end数组赋值给start数组以供下次操作使用 
		}
	}
	for(int i = 1; i <= N; i++){
		if(i != 1) printf(" ");//控制输出格式 
		start[i]--;
		printf("%c%d",mp[start[i]/13],start[i]%13+1); //输出结果 
	} 
	return 0;
}
 

经验

1,对于1 2 3 4 5 6 7 8 9...的输入可以通过for循环实现,如果输入固定的话也可以scanf("%d %d %d",&a,&b,&c);

而对于1,2,3,4,5,6的输入可以通过scanf("%d,%d,%d",&a,&b,&c);实现,两个%d之间是什么,输入的时候就是什么。

2,对于S1,我一开始想到的是用char[]存储,后来发现,char[]智能存储单个字符,后来我又想是不是用string,实际上用

char[]int[]两者结合实现,对于以后很多类似的都可以有借鉴。

3,对于54张牌,采用1-54编号,实际上题目中已经给了提示,而我开始的思路是S1-S13,H1-13,是练题少了。

4,本题思路并不难,只是在实现的过程中对细节把握不好,希望自己再接再厉。









评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值