那个答案怎么了?Plz帮帮我
问题是: 你得到一个N个整数的数组A.您将完成M个查询。每个查询都有以下三种类型之一: C d:顺时针旋转阵列A d个单位。 A d:用d单位逆时针旋转阵列A. R d:查询元素的值,当前是数组A中的第d个元素。 输入
第一行包含两个数字 - 分别为N和M. 下一行包含N个空格分隔的整数,表示数组A. 以下M行中的每一行包含上述形式之一的查询。 输出
对于R类型的每个查询,在单独的行上输出答案。 约束
1≤N≤100000 1≤M≤100000 在所有查询中,1≤d≤N 1≤A≤1000000的元素 数组A和类型R的查询是从1开始的。
实施例
输入: 5 5 5 4 3 3 9 R 1 C 4 R 5 A 3 R 2 输出: 五 3 3
解决方案:
#include<stdio.h>
//#include<iostream>
//using namespace std;
int a[100001];
int index=0,n;
void clock(int);
void ant_clock(int);
void display(int);
int main()
{
unsigned int i,m;
char x;
int y;
scanf("%d %d",&n,&m);
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
while(m--)
{
scanf(" %c%d",&x,&y);
if(1 <= y <= n)
{
if(x=='R')
display(y);
else if(x=='A')
ant_clock(y);
else if(x=='C')
clock(y);
}
else
return 0;
}
return 0;
}
void display(int y)
{
int j=index,x=0;
while(1)
{
if(x==y-1)
break;
j++;
x++;
if(j==n)
j=0;
}
printf("%d",a[j]);
}
void ant_clock(int y)
{
int j;
for(j=0;j<y;j++)
{
index--;
if(index==-1)
index=n-1;
}
}
void clock(int y)
{
int j;
for(j=0;j<y;j++)
{
index++;
if(index==n)
index=0;
}
}
答案 0 :(得分:1)
查询索引基于1是一个问题。而且你的代码中有不必要的循环。
#include <stdio.h>
int arr[100000];
int main() {
int base = 0, size, i, m;
char x;
scanf("%d%d", &size, &m);
for (i = 0; i < size; i++)
scanf("%d", &arr[i]);
while (m-- > 0) {
scanf(" %c%d", &x, &i);
if (x == 'R') {
printf("%d\n", arr[(base + i - 1) % size]);
} else if (x == 'A') {
if ((base -= i) < 0)
base += size;
} else if (x == 'C') {
base = (base + i) % size;
}
}
return 0;
}