Category: 程序设计
这篇文章通过一个“男人说真话、女人说假话”的村庄谜题,展示了逻辑推理中“先定义真实答案”的重要性。100 个村民分别回答村里有 1 到 100 个女人,而真正正确的答案只能有一个,因此只有一个人说了真话。由于说真话的人是男人,所以村里只有 1 个男人,其余 99 人都是女人。文章最后强调,小逻辑题看似简单,却能训练我们避免草率判断,用严谨思维找到答案。 本文还给出个用Python程序来验证这个答案。 今天看到一个挺有意思的小逻辑题。乍一看,它像是一个很简单的数数问题,但真正的关键藏在“谁说真话,谁说假话”这个条件里。 故事是这样的: 从前,有一个奇怪的村子。村子里一共有 100 个人,有男有女。在这个村子里,男人永远说真话,女人永远说假话。 有一天,一个陌生人来到村子里,问村民: “你们村子里一共有几个女人?” 第一个村民回答:“1 个。” 第二个村民回答:“2 个。” 第三个村民回答:“3 个。” 以此类推,直到第一百个村民回答:“100 个。” 那么问题来了:这个村子里到底有多少个女人? 答案是:99 个女人,1 …
电话亭里的 C++:一个旧时代的回声 当电话亭变成图书馆,当编程变成提示词 那些电话亭里的编程书,和即将远去的手写代码 从一英镑电话到 AI 编程:时代真的变了 古法编程:从 C++ 入门书说起 那天和家人散步,路过一个被改造成社区图书馆的英国电话亭,里面竟然放着 HTML 和 C++ 编程书。电话亭曾经承载着昂贵而珍贵的通信记忆,如今成了知识共享的小角落。而随着 AI 和大语言模型的发展,手写代码也许终将像电话亭和算盘一样,成为一个时代的回声。 古法编程: 村里有C++/HTML程序员 那天,我和家人一起散步,来回走了 5 公里。回村里的路上,我注意到一个废弃改造后的电话亭,里面放了很多书,其中竟然还有 HTML 和 C++ 的编程书。 这种路边的红色电话亭算是英国的一大特色,已经有二三十年的历史了。如今,随着手机、互联网和 5G 通信的发展,大部分电话亭早已停止使用。人与人之间的联系变得越来越方便,也越来越便宜。 …
PowerShell 中的 touch 命令(兼容 Linux 风格) 如果你来自 Linux/macOS 环境,可能会很想念 touch 命令:当文件不存在时创建文件,存在时更新它的修改时间。PowerShell 本身并没有内置 touch 命令,但我们可以自己实现一个行为与 Unix 类似的版本(支持多个文件和通配符)。 本文提供一个实用的 touch 函数,你可以将其添加到 PowerShell Profile 中长期使用,同时包含示例和一些边界情况说明。 “touch” 应该具备的行为 在 Unix 系统中,touch 通常具备以下特性: 如果文件不存在,则创建一个空文件 …
理解 C++ 中的 std::transform_reduce 及示例 std::transform_reduce 是一个强大的 C++17 算法,它结合了 transform 和 reduce(或 accumulate)的功能。它允许你对元素进行转换,然后使用二元操作进行归约,从而写出简洁高效的代码。 语法 template<class InputIt1, class InputIt2, class T, class BinaryOp1, class BinaryOp2> T transform_reduce(InputIt1 first1, InputIt1 last1, …
使用原子 TAS 指令实现自旋锁 使用原子 TAS 指令实现自旋锁 Implementing a Spinlock Using the Atomic TAS Instruction 从零实现自旋锁:基于 TAS 的最小同步原语 Building a Spinlock from Scratch with Atomic TAS 用 test-and-set 实现最简单的互斥锁 Implementing …
Amdahl 定律 vs Gustafson 定律 — 完整教程、推导、应用场景及 Python 绘图 Amdahl 定律 vs Gustafson 定律:完整教程、推导、应用场景及 Python 绘图 理解并行加速:通过代码讲解 Amdahl 定律和 Gustafson 定律 并行计算基础:Amdahl 定律、Gustafson 定律及加速建模 并行加速原理:Amdahl 和 Gustafson 定律完整指南 并行扩展解析:推导并比较 …
C++ 一直在不断增加新特性,以便程序员能够区分在编译时运行的代码和在运行时执行的代码。其中两个重要工具是函数 std::is_constant_evaluated()(C++20)和语言级别的 if consteval(C++23)。本文将解释这两者,展示实际示例,比较它们的保证和权衡,并建议在何时使用各自的方法。 这两种技术都允许你编写分支,根据当前的求值是在常量求值(编译时)上下文中还是运行时上下文中而表现不同。差异虽然细微,但非常重要:一个是返回布尔值的函数,另一个是编译器视为仅在编译时检查的特殊 if 语句,编译器会进行特殊处理。 std::is_constant_evaluated() (C++20) 这是一个在 <type_traits> 中声明的函数: #include <type_traits> constexpr bool std::is_constant_evaluated() noexcept; 当当前表达式在常量表达式(编译时)上下文中求值时,该函数返回 true,否则返回 false。 示例: #include <iostream> #include <type_traits> constexpr int …