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; //完结撒花
}