1 条题解

  • 0
    @ 2025-8-24 22:52:27

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar 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)

    来进行输入。

    • b=1b=1 进行数组前移操作
    • b=2b=2 进行数组后移操作
    • b=3b=3 数组前两个元素交换
    • b=4b=4 输出数组

    数组前移

    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
    上传者