算法:
暴力枚举找循环节。
View Code
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<iostream>
#include<vector>
#include<string>
#include<math.h>
#include<map>
#include<set>
#include<algorithm>
using namespace std;
int T,N,L,R;
int card[100];
int pcard[100];
int p[100];
int main( )
{
scanf("%d",&T);
int abc = 1;
while( T-- )
{
for( int i = 1; i <= 52; i++)
{
scanf("%d",&card[i]);
pcard[i] = card[i];
}
scanf("%d%d%d",&N,&L,&R);
int minx = 0;
for( int i = 1; i <= 1001110; i++)
{
int n = 1;
for( int j = L; j <= R; j++)
{
p[n++] = card[j];
}
int v = R - L + 1;
for( int x= L-1; x >= 1; x--)
{
card[x + v] = card[x];
}
for( int t = 1; t <= v; t++)
{
card[t] = p[t];
}
int f = 0;
for( int j = 1; j <= 52; j++)
{
if( pcard[j] == card[j] )
f++;
}
if( f == 52 )
{
minx = i;
break;
}
}
N %= minx;
for( int i = 1; i <= N; i++)
{
int n = 1;
for( int j = L; j <= R; j++)
{
p[n++] = pcard[j];
}
int v = R - L + 1;
for( int x= L-1; x >= 1; x--)
{
pcard[x + v] = pcard[x];
}
for( int t = 1; t <= v; t++)
{
pcard[t] = p[t];
}
}
printf("Case #%d: ",abc++);
for( int j = 1; j <= 51; j++)
{
printf("%d ",pcard[j]);
}
printf("%dn",pcard[52]);
}
return 0;
}
原文链接: https://www.cnblogs.com/tangcong/archive/2012/08/09/2630565.html
欢迎关注
微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/58744
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!