• 刷题笔记 1


    RAD Studio 10.2.3 测试√


    题目来源:CSDN技能树


    1、切面条

    一根高筋拉面,中间切一刀,可以得到2根面条。
    如果先对折1次,中间切一刀,可以得到3根面条。
    如果连续对折2次,中间切一刀,可以得到5根面条。 那么,连续对折10次,中间切一刀,会得到多少面条呢?
    在这里插入图片描述

    总结:
    接口数规律 --> n次折叠接口数 = (n - 1)次折叠接口数 * 2 + 1
    根数与接口数的关系 --> 根数 = 接口数 + 2
    根数与折叠次数的关系 --> 根数 = 2^(折叠次数) + 1


    2、门牌制作

    小蓝要为一条街的住户制作门牌号。
    这条街一共有 2020 位住户,门牌号从 1 到 2020 编号。
    小蓝制作门牌的方法是先制作 0 到 9 这几个数字字符,最后根据需要将字符粘贴到门牌上,例如门牌 1017 需要依次粘贴字符 1、0、1、7,即需要 1 个字符 0,2 个字符 1,1 个字符 7。
    请问要制作所有的 1 到 2020 号门牌,总共需要多少个字符 2?

    #include 
    using namespace std;
    int main()
    {
        int ans = 0, x;
        for (int i = 1; i <= 2020; i++)
        {
            x = i;
            while (x)
            {
                ________________;
            }
        }
        cout << ans;
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    提示:
    利用循环将当前数字的每一位求出,分别进行判断即可

    ==========================================================

    var
      a, i: Integer;
      mTempi: Integer;
      mCnt: Integer;
    begin
      for i := 1 to 2020 do
      begin
        a := i;
        while True do
        begin
          // 取最后一位数(通过取余数的方式获取)
          mTempi := a mod 10;
    
          // 如果这个数是指定的数字
          if mTempi = 2 then
          begin
            Inc(mCnt);
            Memo_Log.Lines.Add(IntToStr(i));
          end;
    
          // 取完最后一位数后,将这个数 / 10
          a := Trunc(a / 10);
    
          // 如果缩小后的数 <= 0 就表示 i 的每一位都已经判断完了
          if a <= 0 then
          begin
            Break;
          end;
        end;
      end;
      Memo_Log.Lines.Add('使用2的次数=' + IntToStr(mCnt));
    end;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32

    3、微生物繁殖

    假设有两种微生物 X 和 Y
    X出生后每隔3分钟分裂一次(数目加倍),Y出生后每隔2分钟分裂一次(数目加倍)。
    一个新出生的X,半分钟之后吃掉1个Y,并且,从此开始,每隔1分钟吃1个Y。
    现在已知有新出生的 X=10, Y=89,求60分钟后Y的数目。
    如果X=10,Y=90呢?
    本题的要求就是写出这两种初始条件下,60分钟后Y的数目。

    #include 
    using namespace std;
    int main()
    {
        int x = 10, y = 90;
        for (int i = 1; i <= 120; i++)
        {
            ________________;
        }
        cout << y << endl;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    提示:
    分析可知,Y分别会在0.5,1.5,2.5······时被吃,所以,把60分钟分成120份,则在除以2余数为1时,Y的数目减少X个

    ==========================================================

    
    const
      CONST_TIME = 120;     // 多少个0.5分钟
    var
      i: Integer;
      x, y: Integer;
    begin
      {
    x 3分钟 需要翻倍(*2)
    y 2分钟 需要翻倍(*2)
    新X 半分钟 会让 y 减少 新x 个
    老X 1分钟 会让 y 减少 老x 个
    
    从上面4个条件中可知:
    最小时间单位 = 0.5分钟
    新x吃完后变成老x 需要间隔一分钟才开始吃
    比如时间0新生的x 在0.5分钟吃掉y 这批x下次吃是1.5分钟的时候 第二次吃是 2.5分钟
    在3分钟的时候出生一批新的x 3.5分钟的时候不管是老的还是新的x都会吃掉y
    以此类推
    4.5分钟 吃y  5.5分钟吃y  6分钟前两批x继续繁殖 6分半刚好这三批x都可以吃y
    由此可以得到规律:x在 0.5 1.5 2.5 3.5 4.5 ... 后续每隔一秒都会吃y
    
    时间每次到 半分钟 2分钟 3分钟 分别触发不同的事件(上面条件可以看成不同的事件)
      }
    
      x := 10;
      y := 90;
    
      for i := 1 to CONST_TIME do
      begin
        if i mod 2 = 1 then
        begin
          // 半分钟事件
          y := y - x;
        end;
    
        if i mod 4 = 0 then
        begin
          // 2分钟事件
          y := y * 2;
        end;
    
        if i mod 6 = 0 then
        begin
          // 3分钟事件
          x := x * 2;
        end;
      end;
    
    
      Memo_Log.Lines.Add('y=' + IntToStr(y));
    end;
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53

    一点点笔记,以便以后翻阅。

  • 相关阅读:
    【300+精选大厂面试题持续分享】大数据运维尖刀面试题专栏(二)
    【Transformers】第 7 章:文本表示
    如何实现零宕机的配置热加载
    长时间久坐危害竟然这么大,这4项检查,男性朋友一定要定期查
    探索人工智能领域——每日30个名词详解【day4】
    OpenCV实现模板匹配和霍夫线检测,霍夫圆检测
    第三节:分支及多人协作
    CAD二次开发--点击窗体按钮后还要再次点击CAD获取焦点才能进行操作?【winform/wpf与CAD焦点切换滞后问题解决办法】
    SLAM学习——开启cmake的第一个项目
    我成功创建了一个Electron应用程序
  • 原文地址:https://blog.csdn.net/qq_44111597/article/details/126040551