#include <stdio.h>
void P(int x[])
{
int m,n,t;
scanf("%d%d",&m,&n);
t=x[m];
x[m]=x[n];
x[n]=t;
}
void R(int x[],int y)
{ int u;
for(int i=0;i<y/2;i++)
{u=x[i];
x[i]=x[y-1-i];
x[y-1-i]=u;
}
}
void D(int x[],int y)
{
int t;
scanf("%d",&t);
for(int i=0;i<y;i++)
x[i]/=t;
}
void M(int x[],int y)
{
int t;
scanf("%d",&t);
for(int i=0;i<y;i++)
x[i]*=t;
}
void S(int x[],int y)
{ int t;
scanf("%d",&t);
for(int i=0;i<y;i++)
x[i]+=x;
}
int main()
{
int n,m,i,j;
int p[1000]={0};
scanf("%d%d",&n,&m);
for(i=0;i<n;i++)
scanf("%d",&p[i]);
char a;
for(j=0;j<m;j++)
{
getchar();
a=getchar();
switch(a)
{
case'S':S(p,n);break;
case'M':M(p,n);break;
case'D':D(p,n);break;
case'R':R(p,n);break;
case'P':P(p);break;
}
}
for(i=0;i<n;i++)
{
printf("%d",p[i]);
if(i!=n-1)
printf(" ");
}
}
#include <stdio.h>
int main()
{
int n,m,i,j,s;
int p[1000]={0};
scanf("%d%d",&n,&m);
for(i=0;i<n;i++)
scanf("%d",&p[i]);
char a;
for(j=0;j<m;j++)
{
getchar();
a=getchar();
switch(a)
{
case'S':scanf("%d",&s);for(i=0;i<n;i++)p[i]=p[i]+s;break;
case'M':scanf("%d",&s);for(i=0;i<n;i++)p[i]=p[i]*s;break;
case'D':scanf("%d",&s);for(i=0;i<n;i++)p[i]=p[i]/s;break;
case'R':for(i=0;i<n/2;i++){int u;
u=p[i];
p[i]=p[n-1-i];
p[n-i-1]=u;
}
break;
case'P':{
int m,n,t;
scanf("%d%d",&m,&n);
t=p[m];
p[m]=p[n];
p[n]=t;break;}
}
}
for(i=0;i<n;i++)
{
printf("%d",p[i]);
if(i!=n-1)
printf(" ");
}
}
两种方法都是解决同一个问题,为什么第二个能过,第一个出错了呀,求大神指点