A1042 Shuffling Machine(洗牌机)
1.牌的编号直接可以对应到花色上,所以只需用数组对编号进排序就好,不用考虑花色。
2.在进行编号与花色对应时,可以建立一个字符数组,编号通过运算对应到字符数组的下标,这样可以避免在输出时进行判断。编号为x,则mp[(x-1)/13]为花色,(x-1)%13+1为所属花色的编号
剪刀锤子布也是这样处理的,可以学习一下这种方法。 https://www.cnblogs.com/kimeina/p/14254569.html
#include <cstdio>
const int N=54;
char mp[5]={'S','H','C','D','J'};
int start[N+1],en[N+1],next[N+1];
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]);
}
while(K--){
for(int i=1;i<=N;i++){
en[next[i]]=start[i];
}
for(int i=1;i<=N;i++){
start[i]=en[i];
}
}
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;
}
自己做法:输出之前大同小异,输出时判断条件。
for(int i=1;i<=54;i++){
if(after[i]<=13)
printf("S%d",after[i]);
else if(after[i]>13&&after[i]<=26)
printf("H%d",after[i]-13);
else if(after[i]>26&&after[i]<=39)
printf("C%d",after[i]-26);
else if(after[i]>39&&after[i]<=52)
printf("D%d",after[i]-39);
else
printf("J%d",after[i]-52);
if(i<54)
printf(" ");
}
浙公网安备 33010602011771号