【蓝桥杯】43709.机器人繁殖

题目描述

X 星系的机器人可以自动复制自己。它们用 1 年的时间可以复制出 2 个自己,然后就失去复制能力。

每年 X 星系都会选出 1 个新出生的机器人发往太空。也就是说,如果 X 星系原有机器人 5 个,1 年后总数是:5 + 9 = 14,2 年后总数是:5 + 9 + 17 = 31。

如果已经探测经过 n 年后的机器人总数 s ,你能算出最初有多少机器人吗?

输入描述

输入一行两个数字 n 和 s,用空格分开,含义如上。n 不大于 100,s 位数不超过 50 位。

输出描述

要求输出一行,一个整数,表示最初有机器人多少个。

输入输出样例

示例 1

输入

2 31

输出

5

示例 2

输入

97 2218388550399401452619230609499

输出

8

解题思路

假设最初的机器人有X个,每年复制2X个,再将一个发往太空,所以第二年,复制出的机器人是 2X-1 个,共有机器人为 X + (2X -1) 个;第三年,复制出的机器人是2 × (2X - 1) - 1个,共有机器人为 X + (2X -1)+ (2 × (2X - 1) - 1) 个。

以X = 5为例,第二年,复制出的机器人是 2 × 5 - 1 = 9 个,机器人总数为 5 + 9 = 14 个;第三年,复制出的机器人是 2 × 9 - 1 = 17 个,机器人总数为 5 + 9 + 17 = 31 个。

现在,已知年数 n ,以及 n 年后的机器人总数 s ,求最初的机器人个数X。

因为 n <= 100 ,考虑使用遍历的方法实现。

算法流程:

  1. 从标准输入读取 n 和 s 的值,并将它们转换为整数。
  2. 我们从 1 开始尝试可能的最初机器人数量 initial_robots。对于每个可能的初始数量,我们计算 n 年后的机器人总数。
  3. 在循环的每一年,我们先计算当前机器人复制出的数量,为当前机器人数量的 2 倍(cur_robots * 2)。但是,我们需要减去 1个机器人,因为要选出 1 个发往太空,所以下一年的机器人数量是 replicated - 1。
  4. 把计算得到的下一年机器人数量累加到 total 中。
  5. 如果最终的 total 等于输入的 s,则输出当前的 initial_robots 作为结果。

代码实现

python 复制代码
import os
import sys

def main():
    n, s = input().split()
    n = int(n)
    s = int(s)
    # 从 1 开始尝试最初的机器人数量
    for initial_robots in range(1, s + 1):
        total = initial_robots
        cur_robots = initial_robots
        for i in range(n):
            # 计算复制的机器人数量
            replicated = cur_robots * 2
            # 下一年的机器人数量
            cur_robots = replicated - 1
            total += cur_robots
        if total == s:
            print(initial_robots)
            break


if __name__ == "__main__":
    main()
相关推荐
码农多耕地呗5 分钟前
力扣543.二叉树的直径(java)(迭代法 and 左右根后序遍历迭代法)
算法·leetcode·职场和发展
深圳多奥智能一卡(码、脸)通系统6 分钟前
电梯门禁系统及机器人乘梯功能的安装调试需要电梯公司技术人员全程配合,这主要由电梯设备的特殊性、安全规范要求及系统集成的复杂性决定。以下是具体原因及配合内容:
机器人·agv·电梯门禁·梯控·国密梯控·二维码电梯·人脸识别电梯
刺客-Andy25 分钟前
Python 第二十节 正则表达式使用详解及注意事项
python·mysql·正则表达式
努力学习的小廉1 小时前
我爱学算法之—— 分治-归并
c++·算法·1024程序员节
Gorgous—l1 小时前
数据结构算法学习:LeetCode热题100-链表篇(下)(随机链表的复制、排序链表、合并 K 个升序链表、LRU 缓存)
数据结构·学习·算法
仰泳的熊猫1 小时前
LeetCode:200. 岛屿数量
数据结构·c++·算法·leetcode
流星5211221 小时前
GC 如何判断对象该回收?从可达性分析到回收时机的关键逻辑
java·jvm·笔记·学习·算法
defaulter1 小时前
Codeforces Round 1049 (Div. 2)C. Ultimate Value
算法·codeforces
新子y1 小时前
【小白笔记】「while」在程序语言中的角色
笔记·python
java1234_小锋1 小时前
[免费]基于Python的YOLO深度学习垃圾分类目标检测系统【论文+源码】
python·深度学习·yolo·垃圾分类·垃圾分类检测