HDU5670Machine(抽象进制)
生活随笔
收集整理的這篇文章主要介紹了
HDU5670Machine(抽象进制)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
有一個機器,它有 m (2\leq m\leq 30)m(2≤m≤30) 個彩燈和一個按鈕。每按下按鈕時,最右邊的彩燈會發生一次變換。變換為: 1. 如果當前狀態為紅色,它將變成綠色; 2.如果當前狀態為綠色,它將變成藍色; 3.如果當前狀態為藍色,它將變成紅色,并且它左邊的彩燈(如果存在)也會發生一次變換。 初始狀態下所有的燈都是紅色的。 詢問按下按鈕 n (1\leq n< {2}^{63})n(1≤n<2?63??) 次以后各個彩燈的顏色。 輸入描述 輸入包含多組數據. 第一行有一個整數T (1\leq T\leq 15)T(1≤T≤15), 表示測試數據的組數. 對于每組數據: 唯一的一行包含2個整數 m (2\leq m\leq 30)m(2≤m≤30) 和 n (1\leq n< {2}^{63})n(1≤n<2?63??) 。 輸出描述 對于每組數據,輸出一個長度為mm的字符串,表示從左到右mm個彩燈的顏色。 R代表紅色;G代表綠色;B代表藍色。 輸入樣例 2
3 1
2 3 輸出樣例 RRG
GR
紅、綠、藍分別表示0、1、2,每次操作就相當于+1,原問題就轉化為求n的三進制
表示的最低的m位,即求?n?mod?3^m3???的三進制表示。
復雜度?O(m)O(m)
1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 using namespace std; 5 typedef long long LL; 6 int main() 7 { 8 int m ,t; 9 LL n; 10 scanf("%d", &t); 11 int color[50]; 12 while (t--) 13 { 14 memset(color, 0, sizeof(color)); 15 scanf("%d%I64d", &m, &n); 16 int cnt = m; 17 while (n > 0 && m > 0) 18 { 19 color[m--] = n % 3; 20 n = n / 3; 21 } 22 for (int i = 1; i <= cnt; i++) 23 { 24 if (color[i] == 0) 25 printf("R"); 26 else if(color[i] == 1) 27 printf("G"); 28 else if (color[i] == 2) 29 printf("B"); 30 } 31 printf("\n"); 32 } 33 return 0; 34 } View Code?
?
轉載于:https://www.cnblogs.com/zhaopAC/p/5428058.html
總結
以上是生活随笔為你收集整理的HDU5670Machine(抽象进制)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android——用Activity和S
- 下一篇: vi的撤销命令