CC++ & Algorithm

什么是算法

中等2
语言版本:C++Python
概述:算法就像做事情的步骤说明书,告诉计算机一步一步完成任务的方法。

算法是什么?从生活到代码的步骤说明书

小朋友,你有没有试过按照一个食谱做蛋糕?食谱里写着:先拿鸡蛋,再打鸡蛋,接着加面粉,然后搅拌,最后放进烤箱。这个食谱就是一套“步骤”。在编程世界里,这种为了完成一件事而设计的、清晰明确的步骤,就叫做算法

算法不一定要用计算机语言来写。比如,每天早上起床的步骤:睁眼 -> 坐起来 -> 穿衣服 -> 刷牙 -> 吃早饭,这就是一个简单的“起床算法”。计算机也像你一样,需要算法告诉它每一步该做什么,而且步骤必须非常清楚,不能有模棱两可的地方。

你可能觉得算法很神秘,其实你每天都在用。比如:

  • 做数学题:先读题→找条件→列算式→计算→写答案
  • 玩猜数字游戏:先猜中间数→根据提示缩小范围→再猜→直到猜中
  • 整理书包:拿出课表→看第二天有什么课→把对应的书本放进书包→拉上拉链

这些都是算法。无论做什么,只要按步骤做就能得到结果,那就是算法。计算机比人更死板,它必须每一步都写得清清楚楚,否则就会“卡壳”或做出错误的事情。

Python代码也是实现算法的一种方式。下面是一个超简单的“计算两个数的和”的算法,用Python写出来:

# 算法:计算两个数相加
a = 3           # 第一个数
b = 5           # 第二个数
sum_result = a + b   # 把a和b加起来
print("和是:", sum_result)  # 输出结果

这段代码就是让计算机执行“输入a和b,把a和b加起来,输出结果”这个算法。算法有三个重要特点:有输入(a和b)、有输出(打印结果)、步骤明确(加法和打印)。无论多复杂的程序,背后都是一个个这样的小算法拼起来的。以后你学会更多Python知识,就能写出更厉害的算法啦!


一、用自然语言描述算法——像聊天一样写步骤

想象一下,你想教一个朋友做番茄炒蛋。你会怎么说?你可能会说:“先把番茄切成块,再把鸡蛋打散,然后炒鸡蛋,最后把番茄放进去一起炒。”这种用日常说话写出来的步骤,叫做自然语言描述算法

自然语言描述算法最大的好处是容易懂,人人都能看。比如,我们要描述一个“找最大数”的算法,可以这样写:

  1. 拿到一堆数字。
  2. 假设第一个数字是最大的。
  3. 依次拿后面的数字和这个最大的比较。
  4. 如果后面的数字更大,就把它当作新的最大的。
  5. 最后报出那个最大的数字。

你看,不用写任何代码,光看文字就知道怎么办。但自然语言有缺点:有时候一句话可以有不同的理解。比如“把鸡蛋打在碗里”,有人可能先打蛋再放碗,有人可能先放碗再打蛋。所以计算机不能直接执行自然语言,它需要更精确的“语言”。

生活中的例子:用自然语言描述“买零食”的算法

你手里有10块钱,想去小卖部买零食。你的算法可能是:

  1. 走到小卖部。
  2. 看看有什么零食,记下价格。
  3. 如果薯片3元,棒棒糖1元,那么你有10元,可以买薯片和棒棒糖。
  4. 付钱,拿零食,回家。

但计算机听不懂“看看”“记下”这种模糊的词,它需要更具体的指令。比如:把价格存进一个列表,然后计算总和是否小于等于10元等等。

常见错误:用自然语言描述时容易漏步骤

很多新手写自然语言算法时,会跳过“初始化”“检查条件”这类步骤。比如描述“猜数字”:

  • 错误写法:猜一个数,如果大了就再猜,小了也再猜,直到猜对。
  • 正确写法:先设置一个随机数(比如7),然后:①输入猜测值;②比较猜测值和随机数;③如果猜大了提示“大了”,如果猜小了提示“小了”,如果相等输出“猜对了”并结束;④回到第①步。

少了“生成随机数”或“循环回去”的步骤,计算机就会卡住。

用自然语言想好步骤,再用Python实现

下面用Python实现刚才的“找最大数”算法:

# 自然语言描述的算法:找最大数
numbers = [3, 7, 2, 9, 5]  # 一堆数字
max_num = numbers[0]        # 步骤2:假设第一个最大
for num in numbers[1:]:     # 步骤3:依次比较后面的数字
    if num > max_num:       # 步骤4:如果当前数字更大
        max_num = num       # 就把这个数字设为新的最大数
print("最大数是:", max_num) # 步骤5:输出结果

看到了吗?先用自然语言画好“路线图”,再用Python把它变成机器能懂的代码。这是程序员最常用的方法,既清晰又不容易出错。

试着用自然语言描述一下你放学回家的步骤,再想想如果用Python实现要怎么写吧!


二、用伪代码描述算法——像代码又像文字

你有没有见过那种半英文半中文的笔记?比如:“如果今天下雨,就带伞;否则,不带。”这种写法既不是纯英语,也不是纯中文,但一看就懂。在编程里,也有一种类似的“中间语言”,叫伪代码

伪代码(pseudocode)就是用很像编程语言但又不用完全遵守语法规则的方式来描述算法。它通常保留一些编程关键词(如if、else、for、while),但省略了Python里那些严格的括号、冒号、缩进等细节。例如,我们要描述“判断一个数是奇数还是偶数”,用伪代码可以写成:

输入一个数 n
如果 n 除以 2 的余数等于 0:
    输出 "偶数"
否则:
    输出 "奇数"

看!它很像代码,但又像自然语言。程序员先用伪代码把逻辑想清楚,再翻译成真正的Python代码,这样既不容易出错,也方便和别人讨论。下面是对应的Python代码:

# 伪代码翻译成的Python代码
n = int(input("请输入一个数字: "))  # 输入一个数
if n % 2 == 0:                      # 如果余数为0
    print("偶数")                   # 输出偶数
else:                               # 否则
    print("奇数")                   # 输出奇数

伪代码的好处:语言无关,方便交流

伪代码最大的好处是语言无关。你写伪代码的时候,不用纠结Python还是C++还是Java,所有人都能看懂。考试里也经常用伪代码来出题,让你理解算法逻辑,然后要求你写出真正的程序。

生活中的例子:用伪代码描述“考试前复习”算法

do:
    选择一门要复习的科目
    看书30分钟
    做练习题10道
    如果做错超过3题,再看书10分钟
    否则,换下一科目
while 还有没复习的科目
输出 "复习完成!"

这个伪代码里有do...while循环(虽然Python里没有这种语法,但意思清楚),也有if...else条件。任何懂编程的人一看就知道你想干什么。

常见错误:伪代码写得太像真代码

有些同学写伪代码时,忍不住加上Python特有的语法(比如冒号、缩进、括号),但伪代码的目标是“让人理解”,不是“让机器运行”。所以不用太严格。比如下面两种写法都可以:

  • 不好:for i in range(len(list)): (太像Python,反而限制了思考)
  • 好:对列表中的每个元素,执行... (更自由)

完整示例:用伪代码描述“计算1到100的和”,再转成Python

伪代码:

设总和 = 0
设计数 = 1
当 计数 ≤ 100 时:
    总和 = 总和 + 计数
    计数 = 计数 + 1
输出 总和

Python代码:

# 从1加到100
total = 0         # 总和初始为0
count = 1         # 计数从1开始
while count <= 100:   # 当计数小于等于100时
    total = total + count  # 累加当前计数
    count = count + 1      # 计数加1
print("1+2+...+100 =", total)  # 输出结果

运行结果:1+2+...+100 = 5050

试试看:用伪代码描述“从1加到100”的算法,再把它写成Python代码。伪代码能帮你把复杂问题变简单,是学习编程的好帮手!


三、新手最容易犯的算法错误

1. 步骤顺序搞反

比如做番茄炒蛋,如果先炒蛋再放番茄,和先放番茄再炒蛋,味道完全不一样。算法也一样,顺序错了结果就错。例如:

  • 错误:先输出“和是”,再把两个数加起来。
  • 正确:先加起来,再输出。

2. 漏掉初始条件

比如求全班同学的平均身高,你忘了从0开始累计总身高,或者忘了数人数,结果就会出错。在代码里,经常要记得初始化变量,比如 total = 0count = 0

3. 死循环(停不下来)

写循环时忘了让循环条件变化,程序就会永远跑下去。比如:

i = 1
while i <= 10:
    print("停不下来啦!")
    # 忘记写 i = i + 1

你的电脑可能会卡死,必须强制关闭。所以写循环时一定要注意改变条件变量

4. 自然语言和代码混用

有些同学写代码时,心里想的步骤和写的代码不一致。比如算法是“找最大数”,但代码里却把数字排序了,虽然结果一样,但步骤不同,容易混淆。建议先写出清晰的算法(自然语言或伪代码),再翻译成代码,不要跳步。


四、完整可运行的示例:猜数字游戏

我们用一个完整的例子,贯穿自然语言→伪代码→Python代码。

自然语言描述算法

  1. 计算机随机想一个1到100之间的整数。
  2. 玩家输入一个猜测的数。
  3. 如果猜测的数比目标大,输出“大了”;如果小,输出“小了”;如果相等,输出“猜对了”并结束游戏。
  4. 重复第2步和第3步,直到猜对为止。

伪代码描述算法

目标 = 随机数(1,100)
循环:
    用户输入 猜测
    如果 猜测 > 目标:
        输出 "大了"
    否则如果 猜测 < 目标:
        输出 "小了"
    否则:
        输出 "猜对了"
        结束循环

Python代码实现

import random  # 引入随机数模块

# 生成1到100之间的随机整数
target = random.randint(1, 100)

while True:                       # 无限循环,直到猜对
    guess = int(input("猜一个1-100之间的数字: "))  # 玩家输入
    if guess > target:            # 如果猜大了
        print("大了,再试试")      # 提示
    elif guess < target:          # 如果猜小了
        print("小了,再试试")
    else:                         # 猜对了
        print("恭喜你猜对了!")
        break                     # 退出循环

运行后,你就可以和计算机玩猜数字游戏了!


五、相关指引

想更深入学习算法,可以关注:

  • 流程图描述算法:用方框、箭头画步骤,比文字更直观(适合画复杂算法)。
  • 排序算法:比如冒泡排序、选择排序——把一堆乱序的数字排好。
  • 查找算法:比如二分查找——在已排序的列表里快速找到目标。
  • Python 基本语法:if、for、while、列表、函数,这些是写算法的基本功。

等你掌握了算法思维,以后学任何编程语言都会很快。记住:算法是程序的灵魂,代码只是工具。先想清楚步骤,再动手写代码,你就能写出清晰又正确的程序!


(完)

例题精讲

1单选题

下列哪一项不是算法的基本特征?

A有穷性
B确定性
C可读性
D有输入
2判断题

一个算法可以没有输入,但必须至少有一个输出。

3填空题
以下Python代码实现了一个求两数最大值的算法,请补全空白处:

def find_max(a, b):
    if a ___ b:
        return a
    else:
        return b
4单选题

关于算法与程序的区别,下列说法正确的是?

A算法必须用Python语言编写
B程序是算法的一种具体实现形式
C算法和程序是完全相同的概念
D程序不需要遵循算法的步骤
5判断题

描述算法的步骤必须使用计算机编程语言,否则计算机无法理解。