游游学姐小分队part 2:跑马灯(位运算)

题目描述

第一关游姐可是很轻松就破了呢,游姐很高兴,在去第二关的路上一直在偷笑boss one,真是个big idiot呀,这么弱的题目也
好意思拿出来,真是丢了他身为boss的脸!不知boss two如何。游游学姐带着小分队到了一座桥的地方,桥前的桌上写着: 
桥上连着跑马灯,用0表示跑马灯亮,1表示跑马灯不亮。在下一秒钟,如果灯往右移动,则1号灯的亮灭情况与现在8号灯相
同,2-8号灯与相对应的1-7号灯相同,如果是向左移动,则8号灯与现在1号灯相同,1-7号灯与现在的2-8号灯对应相同。现
在给你8盏灯的初始状态和一个数n,问n秒后灯的亮灭情况。对了,让你过桥,错了,就请你去深渊。 游游学姐可不想歇
菜。所以,加油!!

输入格式

测试数据有多组,处理到文件结尾。首行为当前跑马灯的状态,第二行为时间n和移位的方向,Left或者Right。

输出格式

输出完成移位后跑马灯的状态,每组输出占一行。

输入样例:
在这里给出一组输入。例如:

01010101
1 Left
01010101
1 Right
00001111
4 Right

输出样例:
在这里给出相应的输出。例如:

10101010
10101010
11110000

这道题本质是是一个位运算的题(求循环左右移之后的状态)
核心点就在于bit=(bit<<n)|(bit>>(8-n))这个公式
举个例子11110000循环左移一位就变成了11100001
因为c++没有循环左移的函数
所以要思考11110000左移一位变成11100000(bit<<n)
而右移8-1位就变成了00000001
11100000与00000001做或运算就变成了11100001
所以变现实现了循环左右移

#include<bits/stdc++.h>
using namespace std;

int main()
{
    bitset<8>bit;
    while(cin>>bit)
    {
        int n;
        string a;
        cin>>n>>a;
        n%=8;
        if(a=="Left")
            bit=(bit<<n)|(bit>>(8-n));
        else 
            bit=(bit>>n)|(bit<<(8-n));
        cout<<bit<<endl;
    }
    return 0;
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值