2024 RoboCom 睿抗机器人开发者大赛-编程技能赛-高职组(国赛)

RC-v1 简版2048

《2048》是一款比较流行的数字游戏,原始的游戏规则是在网格上移动平铺并将相同的数字合并为一个。每次可以选择上下左右其中一个方向去滑动,每滑动一次,所有的数字方块都会往滑动的方向靠拢外,系统也会在空白的地方乱数出现一个数字方块,相同数字的方块在靠拢、相撞时会相加。系统给予的数字方块不是 2 就是 4,玩家要想办法在这小小的 16 格范围中凑出“2048”这个数字方块。
这个游戏自 2014 年发布以来,有了很多变种。现在让我们考虑一个极简的变种:所有方块都落在一个长条轨道中,轨道宽度等于方块边长,并且一端封闭。系统产生的随机数字 A 方块从开放的一端进入轨道排队,如果跟当前端口的数字 B 相等,则 A 消失,B 变成 2B。这个变化可能引起连锁反应,即 2B 如果与其邻居方块的 C 相等,则 2B 方块消失,C 变成 2C;以此类推,直到端口的数字与其邻居不相等、或该数字成为轨道中唯一数字为止。
另一方面,轨道的长度有限,当装满了 m 个方块后,如果下一个方块不能跟端口的方块消掉,则其无法进入轨道,游戏即结束。
本题顺序给出 n 个系统随机产生的数字,请你输出游戏结束时的状态。这里系统给出的数字不限于 2 或 4,可以是任何 2k(k≥1)。

输入格式:

输入首先在一行中给出两个正整数 n(≤104,系统随机产生的数字个数)和 m(≤100,轨道中最多可以容纳的方块数量)。随后一行按照产生的顺序依次给出 n 个入轨的数字 —— 由于每个数字都是 2k,所以输入简化为仅给出幂次 k(1≤k≤100)。例如 32 会被简化为 5,因为 32=25。同行数字间以空格分隔。

输出格式:

在一行中按照从封闭端到开口端的顺序,输出游戏结束(输入结束或轨道满)时轨道中方块上的数值。数字间以 1 个空格分隔,行首尾不得有多余空格。

输入样例 1:

14 5
2 1 1 3 1 2 2 3 8 1 1 2 2 2

输出样例 1:

4 1 4 8 3

输入样例 2:

14 6
2 1 1 3 1 2 2 3 8 1 1 2 2 2

输出样例 2:

4 1 4 8 4

样例说明:

样例 1 中,由于轨道中最多只能容纳 5 个方块,所以最后两个方块无法放入,游戏结束于输出状态。而样例 2 中,由于可以多放入一个方块,所以倒数第 2 步形成的局面是

4 1 4 8 3 2

最后一个输入的方块与轨道开口处的方块相等,所以仍然可以合并成

4 1 4 8 3 3

最后连锁反应终止于输出状态。

#include<bits/stdc++.h>
using namespace std;
int n,m;
vector<int>v,ans;
int main()
{
    cin>>n>>m;
    for(int i=0;i<n;i++)
    {
        int x;
        cin>>x;
        v.push_back(x);
    }
    for(int i=0;i<n;i++)
    {
        if(!ans.size()||(ans.size()&&ans.back()!=v[i]))
        {
            ans.push_back(v[i]);
            if(ans.size()>m)
            {
                ans.pop_back();
                break;
            }
        }
        else
        {
            int t=v[i];
            while(ans.size()&&ans.back()==t)
            {
            	ans.pop_back();
            	t=t+1;
            }
            ans.push_back(t);
        }
    }
    for(int i=0;i<ans.size();i++)
    {
        if(i)cout<<" ";
        cout<<ans[i];
    }
    return 0;
}

RC-v2 为 i 做 e

“为 i 做 e”是最近新出的流行梗。这里的 i 和 e 指 MBTI 人格测试中的不同性格,i 是社恐,e 是外向。“为 i 做 e”就是在一群内向的人中促使自己变成外向(奇奇怪怪无用的知识又增加了)。
给定某次大型活动中的餐桌安排,请你判断一下哪几桌的客人需要“为 i 做 e”了。

输入格式:

输入第一行首先给出正整数 n(≤105),随后 n 行,每行给出一个人的代号和其性格,其中代号由 8 位数字组成,性格是单个字母 ie,其间以空格分隔。
接下来是餐桌安排。首先给出正整数 m(≤103),为餐桌数量,随后 m 行,每行给出一个正整数 k(≤10)以及该桌 k 位客人的代号,用空格分隔。第 i 行对应的是第 i 桌的信息(1≤i≤m)。题目保证没有人在餐桌安排中重复出现,且餐桌上每个人的性格都已给出。

输出格式:

如果一桌客人全是 i 人,则意味着有人要“为 i 做 e”了。请在一行中按递增序输出这些桌的桌号。数字间以 1 个空格分隔,行首尾不得有多余空格。如果这样的餐桌不存在,则在一行中输出 None

输入样例 1:

10
00000000 i
12345678 e
23468270 i
78827341 e
67476289 i
35748108 e
99999999 i
40926483 i
88472901 i
55032849 i
3
3 00000000 67476289 99999999
4 12345678 78827341 35748108 55032849
3 23468270 40926483 88472901

输出样例 1:

1 3

输入样例 2:

10
00000000 i
12345678 e
23468270 i
78827341 e
67476289 i
35748108 e
99999999 i
40926483 i
88472901 i
55032849 i
2
4 78827341 35748108 55032849 00000000
6 12345678 67476289 99999999 23468270 40926483 88472901

输出样例 2:

None
#include<bits/stdc++.h>
using namespace std;
int n,m,k;
string id,ie;
map<string,string>mp;
vector<int>v;
int main()
{
    cin>>n;
    while(n--)
    {
        cin>>id>>ie;
        mp[id]=ie;
    }
    cin>>m;
    for(int i=1;i<=m;i++)
    {
        cin>>k;
        int cnt=0;
        for(int j=0;j<k;j++)
        {
            cin>>id;
            if(mp[id]=="i")cnt++;
        }
        if(cnt==k)v.push_back(i);
    }
    if(v.size())
    {
        for(int i=0;i<v.size();i++)
        {
            if(i)cout<<" ";
            cout<<v[i];
        }
    }
    else cout<<"None";
    return 0;
}

RC-v3 乘法小宇宙

一个 n 位数的正整数 A=an​an−1​⋯a1​ 和另一个 2 位数的正整数 B=b2​b1​ 相乘,其乘法展开式如下图所示:

form.jpg

其中 C=cn+1​cn​⋯c1​ 是 A 与 b1​ 相乘的结果,D=dn+1​dn​⋯d1​ 是 A 与 b2​ 相乘的结果,P=pn+2​pn+1​⋯p1​ 是 A 与 B 相乘的结果。
若上图中的每一位数字都在一个给定的非零个位数字集合 S 里,则称 A 和 B 属于同一个乘法小宇宙 S。
本题给定乘法小宇宙 S 和 A 的位数,请你找出同属于这个乘法小宇宙中的所有 A 和 B。

输入格式:

输入在一行中给出两个正整数 n(<8)和 K(≤5),分别是 A 的位数和乘法小宇宙 S 中元素的个数。第二行给出 K 个 (0, 10) 区间内的整数,为 S 中的元素。题目保证没有重复元素。数字间以空格分隔。

输出格式:

按照 A 的非递减序输出所有同属于这个乘法小宇宙中的 A 和 B,每行输出一对,数字间以 1 个空格分隔,行首尾不得有多余空格。对同一个 A,按 B 的递增序输出。若没有解,则输出 No Solution

输入样例 1:

4 5
4 2 1 6 5

输出样例 1:

5556 44
6111 24
6111 42

输入样例 2:

3 4
9 2 5 6

输出样例 2:

No Solution
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
vector<ll>a,b,c;
set<char>st;
int n,k,x,cnt;
void dfs(ll ans,int cnt,int wei,vector<ll>&v)
{
    if(wei==cnt)
    {
        v.push_back(ans);
        return ;
    }
    for(auto cc:c)
    {
        dfs(ans*10+cc,cnt+1,wei,v);
    }
}
bool check(ll ans)
{
    string s=to_string(ans);
    for(auto ss:s)
    {
        if(st.find(ss)==st.end())return false;
    }
    return true;
}
int main()
{
    cin>>n>>k;
    for(int i=0;i<k;i++)
    {
        int x;
        cin>>x;
        st.insert(x+'0');
        c.push_back(x);
    }
    sort(c.begin(),c.end());
    dfs(0,0,n,a);
    dfs(0,0,2,b);
    for(auto aa:a)
    {
        for(auto bb:b)
        {
            if(check(aa*(bb%10))&&check(aa*(bb/10))&&check(aa*bb))
            {
                //cout<<aa*(bb%10)<<" "<<aa*(bb/10)<<" "<<aa*bb<<endl;
                cout<<aa<<" "<<bb<<endl;
                cnt++;
            }
        }
    }
    if(!cnt)
    cout<<"No Solution";
    return 0;
}

RC-v4 实时中位线 

大考结束后,本题请你实现一个在录入成绩的过程中实时显示中位线分数的功能。即在读入 n 个考分的时候,每读入一个考分就刷新一下当前已经读入的考分的中位线。如果当前考分个数 m 是奇数,中位线是从小到大第 (m+1)/2 个考分的值;如果 m 是偶数,则中位线是从小到大第 m/2 和第 m/2+1 个考分的平均值。

输入格式:

输入第一行给出正整数 n(≤105),随后 n 行,每行给出一个考分,为不超过 100 的非负整数。

输出格式:

对每个输入的考分,在一行中输出该考分被读入后,当前所有已读入的考分的中位线,输出小数点后 1 位。

输入样例:

7
95
78
64
81
33
78
85

输出样例:

95.0
86.5
78.0
79.5
78.0
78.0
78.0
#include<bits/stdc++.h>
using namespace std;
int n,x;
vector<int>v;
int main()
{
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
    {
        scanf("%d",&x);
        v.push_back(x);
        sort(v.begin(),v.end());
        if(i%2==1)
        {
            printf("%.1lf\n",v[i/2]*1.0);
        }
        else
        {
            printf("%.1lf\n",(v[i/2]+v[(i-1)/2])/2.0);
        }
    }
    
    return 0;
}

  • 12
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 历届蓝桥杯单片机国赛题目的pdf文件包含了多年来比的题目,对于参者来说非常有价值。这些题目主要涉及单片机的应用,包括各种实际问题的解决方案设计和实现。 蓝桥杯单片机国赛的题目非常好,具有一定的难度和挑战性。在这些题目中,可以看出织者对参者的考察点,如编程基础、算法设计、电路原理和PCB设计等方面的能力要求。 这些题目的难度和要求因年份而异。一些题目可能要求参者按照给定的要求,设计和实现具体的功能,比如控制器的编程和接口的设计。还有一些题目则更注重算法的设计和优化,要求参者解决一些实际问题,如传感器数据采集和处理、自动控制系统设计等。 参者可以通过阅读历届蓝桥杯单片机国赛题目的pdf,了解以往比的题目类型和要求。同时,可以从中学习其他选手的优秀作品,借鉴他们的思路和方法,不断提高自己的编程水平和解决问题的能力。 总的来说,历届蓝桥杯单片机国赛题目pdf是参者备战比的重要资料,通过认真研读和思考这些题目,可以帮助参者更好地了解比的要求和考察点,为自己的比表现做好准备。同时,也可以通过学习其他选手的优秀作品,借鉴他们的经验和方法,提升自己的编程和设计能力。 ### 回答2: 历届蓝桥杯单片机国赛题目pdf经过多年的发展和举办,已经形成了一套完整的题库。这些pdf文件收录了每年蓝桥杯单片机国赛的题目,包括初和决的所有题目。通过这些pdf文件,参选手可以了解到历年比中的难度和类型,为他们的备战提供了很好的参考。 每年的比题目都由蓝桥杯委会精心设计,力求在知识点的全面性和难度上有所考量。题目内容通常包括单片机基础知识、电路设计、编程能力等方面的要求。比题目除了要求选手具备一定的硬件和软件实验能力外,还要求选手具备良好的分析和解决问题的能力。 通过历届蓝桥杯单片机国赛题目pdf的学习,可以帮助选手更好地了解比要求,熟悉比形式和题型,提高应对复杂问题的能力。同时,这些题目也对教育者具有一定的参考价值,可以作为培训学生的教材和示例。 总之,历届蓝桥杯单片机国赛题目pdf对于参选手和教育者来说都是非常有价值的资源。通过对这些题目的学习和分析,可以更好地为比做好准备,并提高自身的技能水平。希望未来蓝桥杯单片机国赛题目pdf会进一步完善,为单片机爱好者提供更好更全面的支持。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值