1 条题解
-
0
自动搬运
来自洛谷,原作者为

banglee
rp++ || 准初中生 || 拿到蓝钩改签 || 最后在线时间:2025年8月23日14时57分搬运于
2025-08-24 22:52:27,当前版本为作者最后更新于2023-11-14 22:18:22,作者可能在搬运后再次修改,您可在原文处查看最新版自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多
以下是正文
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; //完结撒花 }
- 1
信息
- ID
- 8739
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- 1
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者