题目链接:hdoj 5670 Machine
有一个机器,它有 m(2≤m≤30) 个彩灯和一个按钮。每按下按钮时,最右边的彩灯会发生一次变换。变换为:
- 如果当前状态为红色,它将变成绿色;
2.如果当前状态为绿色,它将变成蓝色;
3.如果当前状态为蓝色,它将变成红色,并且它左边的彩灯(如果存在)也会发生一次变换。
初始状态下所有的灯都是红色的。
询问按下按钮 (1≤n<2^63 ) 次以后各个彩灯的颜色。
三进制
AC代码:
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
typedef long long LL;
int bit[110];
char str[110];
int main()
{
int t; scanf("%d", &t);
while(t--) {
LL n; int m; scanf("%d%I64d", &m, &n);
int k = 0;
while(n) {
bit[k++] = n % 3;
n /= 3;
}
for(int i = 0; i < m-k; i++) {
str[i] = 'R';
}
for(int i = m-k, j = k-1; i < m; i++, j--) {
if(bit[j] == 0) str[i] = 'R';
if(bit[j] == 1) str[i] = 'G';
if(bit[j] == 2) str[i] = 'B';
}
str[m] = 0;
printf("%s\n", str);
}
return 0;
}