hdu 4350 Card 模拟

来源:互联网 发布:淘宝店铺招牌装修 编辑:程序博客网 时间:2024/05/23 15:38

题目分析:将52张牌,摞在一起,每次操作,将从上到下的第L到R(1<=L<=R<=52)张放到最上面,N次操作后,输出从上个到下牌的顺序,,,

思路:很明显的规律题,找出周期即可,,,用函数fun()来模拟操作过程,用Is_Equal()检查是否和原来的一样,从而周初周期T,之后再调用N%T次fun()就可以了

代码:

#include<iostream>#include<cstdio>using namespace std;int arr[100],arr1[100];int N,L,R,T;void fun(){int a[100];for(int i=1;i<L;i++)a[i]=arr[i];int temp=0;for(int i=1;i<=R-L+1;i++)arr[i]=arr[L+temp++];temp=1;for(int i=1;i<L;i++)    arr[R-L+1+temp++]=a[i];}bool Is_Equal(){for(int i=1;i<=R;i++)if(arr[i]!=arr1[i])return false;return true;}int main(){int ca;scanf("%d",&ca);for(int t=1;t<=ca;t++){for(int i=1;i<=52;i++){scanf("%d",&arr[i]);arr1[i]=arr[i];}scanf("%d %d %d",&N,&L,&R);T=0;while(1){   T++;           fun();   if(Is_Equal())   {   break;   }}//printf("T==%d\n\n",T);int temp=N%T;for(int i=1;i<=temp;i++)   fun();printf("Case #%d:",t);//是t不是ca  WA了一次for(int i=1;i<=52;i++)printf(" %d",arr[i]);printf("\n");}system("pause");return 0;}



原创粉丝点击