题目描述
第一关游姐可是很轻松就破了呢,游姐很高兴,在去第二关的路上一直在偷笑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;
}