P9855 [CCC 2008 J2] Do the Shuffle 题解

· · 题解

P9855 [CCC 2008 J2] Do the Shuffle 题解

题目传送门

正文

一道非常简单的模拟题,考察数组前移、后移、交换、输出。

要注意的是,题目的输入并没有给出输入多少组,因此我们要使用

while(cin>>b>>n)

来进行输入。

数组前移

void change_1(){
     char t=c[0];
     for(int i=0;i<4;i++)  //后面的数据不停覆盖前面的数据,实现数组前移
          c[i]=c[i+1];
     c[4]=t;
}

数组后移

void change_2(){
     char t=c[4];
     for(int i=4;i>=0;i--)  //前面的数据不停覆盖后面的数据,实现数组后移
          c[i]=c[i-1];
     c[0]=t;
}

元素交换

元素交换有两种方式,一种是用临时变量,另一种是用 swap 函数来进行交换

方法一

int t;
t=c[0],c[0]=c[1],c[1]=t;

方法二

swap(c[0],c[1]);

有了以上知识,我们便可以写出 AC 代码

AC 代码

#include<bits/stdc++.h>
using namespace std;
int b,n;
char c[10]={'A','B','C','D','E'}; //初始化字符数组

void change_1(){ //数组前移
     char t=c[0];
     for(int i=0;i<4;i++) //后面的数据不停覆盖前面的数据,实现数组前移
          c[i]=c[i+1];
     c[4]=t;
}

void change_2(){ //数组后移
     char t=c[4];
     for(int i=4;i>=0;i--) //前面的数据不停覆盖后面的数据,实现数组后移
          c[i]=c[i-1];
     c[0]=t;
}

void change_3(){ //元素交换
     swap(c[0],c[1]);
}

void output(){ //输出
     for(int i=0;i<5;i++)
          cout<<c[i]<<" ";
}
int main() {
     while(cin>>b>>n)  //题目的输入并没有给出输入多少组,要用 while 输入
     { 
          if(b==1)  //第一种情况,数组前移
               for(int i=1;i<=n;i++) //执行 n 次
                    change_1();
          if(b==2)  //第二种情况,数组后移
               for(int i=1;i<=n;i++)
                    change_2();
          if(b==3)  //第三种情况,元素交换
               for(int i=1;i<=n;i++)
                    change_3();
          if(b==4)  //第四种情况,输出
          {
               output();
               break;  //题目说要终止程序,而在本题此处 break 和 return 0 的效果是相同的
          }
     }
     return 0;  //完结撒花
}