您的位置:首页 > 其它

pat1042Shuffling Machine (20)

2015-10-12 22:39 211 查看
题意分析:

(1)给出54张扑克牌的原始顺序,给出任意1~54的排列,此排列意味着对本次扑克牌位置的调整,数组中的序号为a的值b,意味着将原来在a位置的扑克牌移动到第b号位置,求按此排列洗牌K次后的顺序。

(2)因为每次所给的调整顺序一样,对于原始序列中的第i个牌,我们暂且就将他记为i,追踪它在K次调整后“花落谁家”,假设为j,然后用另外一个数组newOrder在第j个位置存i.这样每一张扑克牌最终都会有自己的位置,再依次便利这个数组中的元素就知道,这个位置的牌了

可能坑点:

(1)要注意必须用额外的数组来存调整后的顺序,一般注意这点就不会出错,最后的结果输出时,因为起始位置不为0,所以不能用整除和取余来确定前缀和后缀,如:S13,初始位置是13,整除13后为1,取余后为0.

#include <iostream>

using namespace std;

int main()
{
int K,i=1,j=1;
int order[55];
int newOrder[55];
cin>>K;
while(i<=54)cin>>order[i++];
while(j<=54)
{
int num=j;
for(int k=0;k<K;k++)
{
int temp=order[num];
num=temp;
}
newOrder[num]=j;
j++;
}
int first=1;
for(int k=1;k<=54;k++)
{
if(first)first=0;
else cout<<" ";
if(newOrder[k]>=1&&newOrder[k]<=13)cout<<'S'<<newOrder[k];
else if(newOrder[k]<=26)cout<<'H'<<newOrder[k]-13;
else if(newOrder[k]<=39)cout<<'C'<<newOrder[k]-26;
else if(newOrder[k]<=52)cout<<'D'<<newOrder[k]-39;
else cout<<'J'<<newOrder[k]-52;
}
cout<<endl;
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: