小猴编程周赛C++ | 密码锁

学习C++从娃娃抓起!记录下在学而思小猴编程学习过程中的题目,记录每一个瞬间。侵权即删,谢谢支持!

附上汇总贴:小猴编程C++ | 汇总-CSDN博客


【题目描述】
小猴有一个密码锁,密码锁是由 n 个轮子组成,每个轮子上都写着数字 a i a_i ai。在第 i 轮子上,他可以拨动轮子移动。每次移动有两种类型:
① 向上移动(用字符U表示):表示将第 i 个数字向上移动 1 步,数字 9 向上移动之后会回到数字 0;
② 向下移动(用字符D表示):表示将第 i 个数字向下移动 1 步,数字 0 向下移动之后会回到数字 9。
[图片]
如上图所示,n=4时,密码锁显示的数字序列是 0,0,0,0。
小猴把正确密码打乱之后忘记了开锁密码,但是小猴记得密码锁从左到右的每个轮子上显示的数字和打乱密码的时候每个轮子的移动方式。请你帮助小猴找到他的正确
【输入】
第一行一个整数 t,表示有 t 组测试数据;
每组测试数据:
第一行,一个整数 n,表示密码锁有 n 个轮子;
第二行,n 个整数 a 1 , a 2 , … , a n a_1,a_2,\dots,a_n a1,a2,,an,表示每个轮子显示的数字;
接下 n 行,每行一个只包含字符 U 和 D 的字符串 s,依次表示从左到右的每个轮子的移动方式。
【输出】
每组数据输出一行,n 个整数,表示正确密码。
【输入样例】

2
2
2 8
DDDDDDD
DDU
3
6 8 2
DDDU
UUD
U

【输出样例】

9 9 
8 7 1

【代码详解】
[图片]

#include <bits/stdc++.h>
using namespace std;
int t, n, a[105];
int main()
{
    cin >> t;
    while (t--) {
        cin >> n;
        for (int i=1; i<=n; i++) {  // 输入密码锁当前数字
            cin >> a[i];
        }
        for (int i=1; i<=n; i++) {
            string s;
            cin >> s;  // 读入每个轮子的移动方式
            for (int j=0; j<s.size(); j++) {
                if(s[j]=='D') {  // 对于'D'需要加1
                    a[i]++;
                    if (a[i]==10) a[i] = 0;
                } else {  // 对于'U'需要减1
                    a[i]--;
                    if (a[i]==-1) a[i] = 9;
                }
            }
        }
        for (int i=1; i<=n; i++) {  // 输出原来的密码数字
            cout << a[i] << " ";
        }
        cout << endl;
    }

    return 0;
}

【运行结果】

2
2
2 8
DDDDDDD
DDU
9 9 
3
6 8 2
DDDU
UUD
U
8 7 1
  • 19
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值