您的位置:首页 > 其它

NYOJ 511 移动小球

2014-03-20 16:34 302 查看
一道水题,是看到入门经典里有这道题目才来做的.

因为之前一看到数组下标就头疼,做这道题之前就有不祥的预感.果然

哎....

题目很简单,只要写出数组左移和右移的函数一般来说就解决了.

可是我偏偏在寻找下标的时候漏了一个'=' 就这样折腾了我半天....

这次是用数组写的,晚上用链表试试.

#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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  ACM NYOJ