432-数字的奥秘,AI与11,AI辅助,相辅相成 | 豆包MarsCode AI刷题

51 阅读5分钟

问题描述

小U最近开发了一个独特的AI模型,它有一个有趣的特点:当你给出一系列数字时,例如从1到N,AI会将这些数字视为一个没有空格或逗号的连续字符串。例如,当你给定N=11时,AI会展示的内容是“1234567891011”。小U对数字“11”非常感兴趣,她想知道在这个连续字符串中,子字符串“11”出现的次数是多少。

你需要帮助小U编写一个程序,给定一个整数N,计算子字符串“11”在AI模型感知的序列中出现的次数。


测试样例

样例1:

输入:N = 11
输出:1

样例2:

输入:N = 100
输出:2

样例3:

输入:N = 111
输出:6

问题分析

题意很简单,就是计算由1~n拼接而成的字符串中有多少“11”这样的子字符串。

AI辅助

这个问题非常简单,我们只需要将所有的数字拼接起来,然后计数就可以了,我们尝试询问AI应该如何编写这样的代码。

def solution(N: int) -> int:
    # 生成从1到N的连续字符串
    continuous_string = ''.join(str(i) for i in range(1, N + 1))
    
    # 计算子字符串“11”出现的次数
    count = continuous_string.count('11')
    
    return count

if __name__ == '__main__':
    print(solution(N = 11) == 1)
    print(solution(N = 100) == 2)
    print(solution(N = 111) == 6)

上面这个代码,简单,简洁,不愧是Marscode AI,太厉害啦!个屁啊!!!为什么样例都过不了~~~~

Debug

这时候就需要我们自己来检查这样的代码了,这个代码只有短短的三行:

  1. 生成连续字符串:我们使用join方法和生成器表达式来生成从1到N的连续字符串。
  2. 查找子字符串:我们使用字符串的count方法来计算子字符串“11”在生成的字符串中出现的次数。
  3. 返回答案:返回count值。

第1、3步,很明显,基本上没什么问题,那问题一定就是出现在第二步上了。

使用count计算字符串“11”中出现的次数,看起来也没问题啊。究竟是问题出现在哪里呢,难道是count方法存在什么猫腻?

解铃还须系铃人,我们不妨再问问AI。

count方法具体是做什么的

AI回答:

count方法是Python字符串对象的一个内置方法,用于计算指定子字符串在字符串中出现的次数。具体来说,count方法会返回子字符串在字符串中出现的非重叠次数。

注意到了吗?在这个回答中出现了非常重要的三个字——非重叠,这意味着是什么。如果字符串是111,count只能识别出答案是1。而在这题中,题目的意思明显是答案是2.

茅塞顿开,这下就简单了,我们告诉AI

我希望你计算数量的时候也能将重叠的情况计算进去

AI 回答:

明白了,你希望计算子字符串“11”在连续字符串中出现的次数时,包括重叠的情况。Python的count方法默认是不计算重叠的子字符串的,因此我们需要手动实现一个函数来计算重叠的子字符串。

解题思路

  1. 生成连续字符串:首先,我们需要生成从1到N的连续字符串。
  2. 计算重叠子字符串:然后,我们需要手动实现一个函数来计算子字符串“11”在生成的字符串中出现的次数,包括重叠的情况。

代码实现

我们可以通过遍历字符串并检查每个位置是否存在子字符串“11”来实现这个功能。以下是完整的代码实现:

def solution(N: int) -> int:
    # 生成从1到N的连续字符串
    continuous_string = ''.join(str(i) for i in range(1, N + 1))
    
    # 计算子字符串“11”出现的次数,包括重叠的情况
    count = 0
    for i in range(len(continuous_string) - 1):
        if continuous_string[i:i+2] == '11':
            count += 1
    
    return count

if __name__ == '__main__':
    print(solution(N = 11) == 1)  # 输出: True
    print(solution(N = 100) == 2)  # 输出: True
    print(solution(N = 111) == 6)  # 输出: True

代码解释:

  1. 生成连续字符串:我们使用join方法和生成器表达式来生成从1到N的连续字符串。
  2. 计算重叠子字符串:我们遍历字符串,检查每个位置是否存在子字符串“11”,如果存在则计数加1。

总结

提交,必然是通过的,不愧是我们的Marscode AI。

由此可见,AI在我们刷题的过程中扮演了非常重要的角色。它不仅能够快速提供解题思路,还可以帮助我们优化代码、分析问题,极大地提升学习效率。然而,AI也难免会出现一些小错误或不够完善的地方,这就需要我们在阅读和理解AI提供的解答基础上,对其进行分析、引导,并提出改进建议。通过这种人机协作的方式,形成了一个互相帮助、共同进步的良性循环。这种结伴编程的模式,类似于Copilot这样的智能工具,不仅让我们能够更高效地完成刷题,还培养了我们对算法问题的深度理解和独立思考能力,真正实现了学与用的结合。