一道水题,是看到入门经典里有这道题目才来做的.
因为之前一看到数组下标就头疼,做这道题之前就有不祥的预感.果然
哎....
题目很简单,只要写出数组左移和右移的函数一般来说就解决了.
可是我偏偏在寻找下标的时候漏了一个'=' 就这样折腾了我半天....
这次是用数组写的,晚上用链表试试.
#include <stdio.h>
int ball[11000];
void Rightmove(int p,int q);
void Leftmove(int p,int q);
int find(int x,int n);
int main()
{
//freopen("input.txt","r",stdin);
char s;
int N;
scanf("%d",&N);
int X,Y;
while (N--)
{
int i;
int m,n;
scanf("%d%d",&m,&n);
getchar();
for (int i = 1; i <= m; i++)
ball[i] = i;
for (int j = 0; j < n; j++)
{
scanf("%c%d%d",&s,&X,&Y);
getchar();
int p = find(X,m);
int q = find(Y,m);
if (s == 'A')
{
if (p > q)
Rightmove(q,p);
else
Leftmove(p,q - 1);
}
else if (s == 'B')
{
if (p > q)
Rightmove(q + 1,p);
else
Leftmove(p ,q);
}
else
{
if(X == 1)
{
if(q==m)
printf("%d\n",ball[1]);
else
printf("%d\n",ball[q + 1]);
}
else
{
if(q==1)
printf("%d\n",ball[m]);
else
printf("%d\n",ball[q - 1]);
}
}
}
}
return 0;
}
void Leftmove(int p,int q)
{
int i;
int temp = ball[p];
for (i = p; i < q; i++)
ball[i] = ball[i + 1];
ball[i] = temp;
}
void Rightmove(int p,int q)
{
int i;
int temp = ball[q];
for (i = q; i > p; i--)
ball[i] = ball[i - 1];
ball[i] = temp;
}
int find(int x,int n)
{
for (int i = 0; i <= n; i++)
if (ball[i] == x)
return i;
}