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.
(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; }
相关文章推荐
- Struts2 ModelDriven模型驱动的使用
- k数和
- pip install -U sklearn 更新sklearn到最近版
- 【笔记】德雷福斯模型
- iOS9 HTTP 不能正常使用的解决办法
- 黑客入门初识
- lintcode 容易题:strStr 字符串查找
- hdu5072Coprime
- linux shell 编程1文件权限检测、字符串比较判断、数值大小比较、时间获取以及单引号双引号反引号等的使用
- MATLAB计算宇宙外太阳辐射Ra并存tif格式
- [前端]JavaScript图片切换
- 项目进度管理项目成本管理
- epoll 的accept , read, write(重要)
- 朱刘算法 , 以UVa11183为例
- 常用的网络
- 关于spring 3.0.5的<mvc:resources> 标签的使用
- leetcode之Implement Stack using Queues
- 1036_跟奥巴马一起编程
- 求1-n位数的所有数
- Paper阅读笔记_3