当前位置: 首页 > 编程笔记 >

C ++中的赛车

颜高朗
2023-03-14
本文向大家介绍C ++中的赛车,包括了C ++中的赛车的使用技巧和注意事项,需要的朋友参考一下

假设我们有一辆汽车,它在无穷编号线上的位置0开始,速度+1。赛车会按照以下说明自动运行:A:加速,R-反向。当我们收到指令“ A”时,我们的汽车将执行以下操作:

  • 位置:=位置+速度,然后速度=速度* 2。

当我们收到指令“ R”时,我们的汽车将执行以下操作:

  • 如果速度为正,则速度= -1,

  • 否则速度= 1。

例如,执行完“ AAR”指令后,我们的汽车将转到位置0-> 1-> 3-> 3,速度将变为1-> 2-> 4->-1。

现在假设我们有一些目标位置。我们必须找到最短指令序列的长度才能到达那里。

因此,如果输入类似于target = 6,则输出将为5,因为可能的序列之一是AAARA,位置序列将为0-> 1-> 3-> 7-> 7-> 6

为了解决这个问题,我们将遵循以下步骤-

  • 定义一组参观

  • 定义一个队列q

  • 将{0,1}插入q

  • 对于初始化级别:= 0,如果非q为空,则更新(将级别增加1),执行-

    • 定义一对curr:= q的前元素,从q删除元素

    • 如果第一个与目标相同,则-

    • 前进:=当前第一个+当前第二个

    • forwardSpeed:=当前秒* 2

    • 键:=将正向转换为字符串并置“ *”将并转正向速度转换为字符串

    • 如果正向> 0且|正向-目标| <没有访问目标和非键,则-

    • key:=将curr的第一个转换为字符串连接“ *”,当curr的第二个> 0时连接0,否则为-1

    • 如果curr.first> 0并且| target-curr.first | <未访问目标和键,则-

    • 回报水平

    • 将键插入已访问

    • 将{forward,forwardSpeed}插入q

    • 将键插入已访问

    • 将{curr.first(如果curr.second> 0,然后是-1,否则为1})插入q

    • 对于初始化k:= q的大小,当k> 0时,更新(将k减1),执行-

    • 返回-1

    让我们看下面的实现以更好地理解-

    示例

    #include <bits/stdc++.h>
    using namespace std;
    class Solution {
    public:
       int racecar(int target) {
          unordered_set < string > visited;
          queue < pair <int ,int> > q;
          q. push({0, 1});
          for(int level = 0; !q.empty(); level++){
             for(int k = q.size(); k > 0; k-- ){
                pair <int, int> curr = q.front();
                q.pop();
                if(curr.first == target) return level;
                int forward = curr.first + curr.second;
                int forwardSpeed = curr.second * 2;
                string key = to_string(forward) + "*" + to_string(forwardSpeed);
                if(forward > 0 && abs(forward - target) < target && !visited.count(key)){
                   visited.insert(key);
                   q.push({forward, forwardSpeed});
                }
                key = to_string(curr.first) + "*" + to_string(curr.second > 0 ? - 1: 1);
                if(curr.first > 0 && abs(target - curr.first) < target && !visited.count(key)){
                   visited.insert(key);
                   q.push({curr.first, curr.second > 0 ? - 1: 1});
                }
             }
          }
          return -1;
       }
    };
    main(){
       Solution ob;
       cout << (ob.racecar(6));
    }

    输入值

    6

    输出结果

    5
     类似资料:
    • 又来几封感谢信,真的顶不住了,emo着面完的 问的网络编程比较多 面试时长:30min 面试内容: * 自我介绍 * 内存泄漏解决 * 哈希表查找慢怎么办 * rehash * 阻塞方式有哪些 * io多路复用 * 网络编程 * c和c++区别 * 平时遇到问题会怎么解决 * code review过吗 * nlogn的排序 * 归并排序过程 * 链表实现的方式有哪些

    • 捞经 一面,项目+八股 二面,项目+hr问题,说到C会枯燥,我迟疑了一下哈哈哈 我跟同门同一天一二面的,同门9.14就通知意向,提交材料。 我9.28被捞起来,突然通知通过,29就联系谈薪资。😬😬还说优先考虑我,我不是很认可。😬😬😬 正式批女生10%坑位#中新赛克#

    • 中新赛克(提前批)    C开发 6.15    官网投递 6.30    一面    视频面试    20min 1、自我...... 2、从简历上挑了一个项目让我陈述,正好前几天过了一下细节,还算顺利 3、项目用的32芯片,问是裸板开发还是基于系统,什么系统 4、Linux熟悉到什么程度,我说还可以,也没继续问😂 5、简单的C八股,static、volatile、堆和栈的区别,各种变量的存储

    • 1.自我介绍 2.字节测开的广告业务介绍,有什么难点 3.go的反射 4.多态的实现,仔细讲讲 5.虚函数,父类怎么确定要调用哪个子类 6,指针和引用,然后出了一个,int a;int *p = &a; int &p = a大概是这个样子,问pqa地址是否一样 7.指针有几级,两级指针代表什么,什么情况下使用 两级指针就是指向一级指针的指针。简单地说,如果一个二级指针指向一个一级指针,那么这个二级

    • 9月14号,一面,时间约35min, 自我介绍,上来看代码,两道简单程序题,一到手写简单实现mmcp函数, 大端序小端序了不了解?如何判断是大端序还是小端序?联合体了解吗?(引导回答正确答案),如何使用联合体判断大小端? 进程间通信方式有哪些?使用共享内存时要注意什么?使用或了解过哪些锁?自旋锁了解吗? static关键字了不了解?说一下作用?修饰一个普通成员变量时,会有什么特性? 讲一讲项目,在

    • 问我有没有嵌入式的使用经验,问单片机的启动过程(我直接说嵌入式都是本科学的东西,现在记不太清了,凉啊) 问了我一些项目的问题,简要给他说了下。又问了我懂不懂移动通信(说学了忘了)。 又问了我为啥学的是雷达不是嵌入式(这个问题该如何回答呀,我实话实说的:怕遇见渣导找师姐推荐的) 后面看到又有新人进来了直接就叫说没有问我的了 我看项目招聘需求上也没说要搞嵌入式呀