1438 奥格瑞拉日常—考考你的记忆

描述

魔兽世界里面有一个很有趣的日常任务,不知道有没有人玩过,任务是这样的,有一个水晶在正中,他的四个方向各有一个颜色的水晶灯,分别是红黄蓝绿,现在该水晶会按照一个顺序依次触发N次水晶灯,即该水晶灯被点亮,你的任务就是,当水晶触发N次水晶灯结束后,你要按照你的记忆中的顺序自己去点一次水晶灯,如果中途有一个错误了,就重头开始,这个N在游戏中是从1开始逐渐增加到8的,也就是说你最长记忆需要记忆8个。

举个例子,水晶触发顺序是:红红黄红红;你的触发顺序也必须是红红黄红红才OK。

TS玩这个游戏玩了10天了(每天只能玩一次),现在他觉得很累,每次要背N多,不过他“发明”了一种简单的方法,他的方法如下:

如果触发的顺序是:黄黄黄红红绿红绿黄蓝

那么他记忆的方式是:2个黄2个红绿红绿黄蓝

即第一个不用记,剩下的部分如果连续的触发灯是相同的就记忆一个颜色和个数就OK,不用全记忆;

现在要求你用程序来实现这个扫描过程,并且反馈出记忆的信息,这里规定4个颜色用4个字母代替:红-R,黄-Y,蓝-B,绿-G。

比如现在的激发顺序是:RRRYYBGGRRBY

那么反馈的结果就应该是这样一个字符串:2R2YB2G2RBY

输入

输入第一行包含一个整数T,表示有T组数据,不超过1000组

以下每组数据包含两行,第一行包含一个整数N,不大于10,000,表示该字符串的大小,第二行包含一个字符串,包含不超过10,000个字符,并且仅包含RYBG四种字母。

输出

对于每组输入按照题目要求输出最终字符串,如果长度=1就输出一个空行。

样例输入
2
12
RRRYYBGGRRBY
1
R
样例输出
2R2YB2G2RBY

 
   
#include<iostream> 
#include<stdio.h> 
using namespace std; 
int main() 
{ 

int t; 
scanf("%d",&t); 

while(t--) 
{ 
int n,ans; 
char x; 
char last; 
char l; 
bool f; 
scanf("%d",&n); 
cin>>x; 
n--; 
if(n==0)printf("\n"); 
if(n>0) 
{ 
scanf("%c",&last); 
ans=1; 
f=1; 
n--; 

while(n--) 
{ 
f=1; 
scanf("%c",&l); 
if(l==last)ans++; 
else 
{ 
if(ans==1)f=0; 
if(f) printf("%d""%c",ans,last); 
else printf("%c",last); 
ans=1; 
last=l; 
} 

} 
if(ans==1)f=0; 
if(f) printf("%d""%c\n",ans,last); 
else printf("%c\n",last); 
} 
} 
} 


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值