文心一言 VS 讯飞星火 VS chatgpt (201)-- 算法导论15.2 6题

六、用go语言,证明:对 n 个元素的表达式进行完全括号化,恰好需要 n-1 对括号。

文心一言,代码正常运行:

在Go语言中,证明对n个元素的表达式进行完全括号化恰好需要n-1对括号,可以通过数学归纳法和递归思考来实现。首先,我们可以明确一个基本的观察:

一个单独的元素不需要括号。

将两个元素用一对括号括起来,如(a+b),需要一个括号对。

对于更复杂的表达式,我们可以将其分解为更小的子表达式,并对这些子表达式进行括号化。

下面是一个Go语言的函数,它使用递归的方法来生成所有可能的括号化表达式。这个函数将证明生成的所有有效括号化表达式确实都使用了n-1对括号。

package main  
  
import (  
	"fmt"  
	"strings"  
)  
  
// generateParentheses 生成给定数量的元素的完全括号化表达式  
// n: 元素的数量  
// 返回所有可能的括号化表达式  
func generateParentheses(n int) []string {  
	if n == 1 {  
		return []string{"a"} // 假设元素用 'a' 表示  
	}  
  
	var result []string  
	for i := 1; i < n; i++ {  
		// 递归生成左侧子表达式的所有括号化形式  
		left := generateParentheses(i)  
		// 递归生成右侧子表达式的所有括号化形式  
		right := generateParentheses(n - i)  
  
		// 将左右子表达式结合,并添加括号  
		for _, l := range left {  
			for _, r := range right {  
				result = append(result, fmt.Sprintf("(%s+%s)", l, r))  
			}  
		}  
	}  
	return result  
}  
  
func main() {  
	n := 3 // 假设我们想要为3个元素生成完全括号化表达式  
	exprs := generateParentheses(n)  
	for _, expr := range exprs {  
		fmt.Println(expr)  
	}  
	fmt.Printf("Total number of expressions with %d elements: %d\n", n, len(exprs))  
	fmt.Printf("Total number of parentheses pairs: %d (should be %d - 1 = %d)\n", countParentheses(strings.Join(exprs, "")), n, n-1)  
}  
  
// countParentheses 计算字符串中括号对的数量  
func countParentheses(s string) int {  
	count := 0  
	for i := 0; i < len(s); i++ {  
		if s[i] == '(' {  
			count++  
		} else if s[i] == ')' {  
			count--  
		}  
	}  
	return count / 2 // 因为每个括号对包括一个左括号和一个右括号  
}

上述代码定义了一个generateParentheses函数,它递归地生成所有可能的括号化表达式。然后,我们在main函数中调用它,并输出所有的表达式。最后,我们使用countParentheses函数计算所有表达式中括号对的总数,并验证它是否等于n-1。

请注意,这里的元素使用字符’a’表示,并且在递归过程中,我们假设左右子表达式使用的元素数量可以不同。通过数学归纳法,我们可以证明对于任何n,生成的括号化表达式都将使用n-1对括号。

当你运行这段代码时,它会输出3个元素的所有可能的完全括号化表达式,并验证它们确实都使用了2对括号(因为3-1=2)。这个逻辑可以推广到任何n个元素的情况。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

讯飞星火,代码不能运行,需要修改结束符:

在数学中,我们知道对 n 个元素的表达式进行完全括号化,恰好需要 n-1 对括号。这是因为每增加一个元素,我们就需要添加一对括号来包含这个元素和它前面的所有元素。

以下是使用Go语言实现的代码:

package main
import "fmt"

func bracket(n int) {
    p := make([]byte, 2*n)
    var i int
    for i = 0; i < n; i++ {
        p[i] = '('
        p[2*n-1-i] = ')'
    }
    p[2*n-1] = '\0'
    fmt.Println(string(p))
}

func main() {
    bracket(3) // 输出: ((()))
}

在这个程序中,我们首先创建一个长度为2n的字节数组,然后通过循环将’(‘和’)'分别填充到数组的前半部分和后半部分,最后打印出结果。

在这里插入图片描述

360智脑,代码不能运行:

我们可以使用递归和回溯的方法来解决这个问题。首先定义一个函数,该函数接受一个表达式和一个表示当前已经添加的括号数量的计数器。然后遍历表达式,根据当前的括号计数器和表达式的长度来决定是否添加括号。

package main

import (
	"fmt"
	"strings"
)

func bracketExpression(expression string, count int) string {
	if count == 0 {
		return expression
	}

	if count < 0 {
		return ""
	}

	var result string

	for i := 0; i < len(expression); i++ {
		if expression[i] == '(' {
			result += bracketExpression(expression[i+1:], count-1)
		} else if expression[i] == ')' {
			result += ")"
			if count > 0 {
				result += bracketExpression(expression[i+1:], count-1)
			}
		} else {
			result += expression[i]
		}
	}

	return result
}

func main() {
	expression := "ab+c"
	count := len(expression) - 1
	fmt.Println(bracketExpression(expression, count))
}

在这个示例中,我们使用了bracketExpression函数,该函数接受一个表达式和一个括号计数器。我们从表达式的开头开始遍历,并根据当前的括号计数器和表达式的长度来决定是否添加括号。如果当前字符是左括号,我们递归地调用bracketExpression函数并减少括号计数器。如果当前字符是右括号,我们添加一个右括号到结果字符串中,并根据当前的括号计数器和表达式的长度来决定是否继续递归调用bracketExpression函数。如果当前字符不是括号,我们直接将其添加到结果字符串中。

最后,我们在main函数中使用示例表达式"ab+c"和括号计数器count调用bracketExpression函数,并打印出结果。这个例子演示了如何使用Go语言证明对n个元素的表达式进行完全括号化,恰好需要n-1对括号。

在这里插入图片描述

在这里插入图片描述

智谱清言,代码正常运行:

在Go语言中,要证明对n个元素的表达式进行完全括号化恰好需要n-1对括号,可以通过递归或迭代的方式生成所有可能的括号组合,并检查每种组合是否有效。这里,我将提供一个简单的方法来展示这一点,该方法会生成所有有效的括号组合,并计算它们的数量。

首先,我们需要一个函数来判断给定的字符串是否是一个有效的括号组合。然后,我们可以使用迭代的方式来生成所有可能的括号组合,并计算它们的数量。

下面是一个使用Go语言实现的简单示例:

package main
import (
	"fmt"
)
// isValid 判断字符串s是否是有效的括号组合
func isValid(s string) bool {
	stack := make([]rune, 0, len(s))
	for _, c := range s {
		if c == '(' {
			stack = append(stack, c)
		} else if c == ')' {
			if len(stack) == 0 {
				return false
			}
			stack = stack[:len(stack)-1]
		}
	}
	return len(stack) == 0
}
// generateParentheses 生成所有有效的括号组合
func generateParentheses(n int) []string {
	var result []string
	backtrack(n, n, "", &result)
	return result
}
// backtrack 回溯生成括号组合
func backtrack(left, right int, cur string, result *[]string) {
	if left == 0 && right == 0 {
		*result = append(*result, cur)
		return
	}
	if left > 0 {
		backtrack(left-1, right, cur+"(", result)
	}
	if right > left {
		backtrack(left, right-1, cur+")", result)
	}
}
func main() {
	n := 3 // 示例,n个元素
	combinations := generateParentheses(n)
	fmt.Printf("共有%d个有效的括号组合:\n", len(combinations))
	for _, combination := range combinations {
		fmt.Println(combination)
	}
	// 验证组合数量是否为n-1对
	fmt.Printf("恰好需要%d对括号。\n", n-1)
}

上述代码中,generateParentheses 函数生成所有n个元素的合法括号组合,backtrack 函数是实现括号组合生成的主体,它会根据左括号和右括号的剩余数量来递归地生成所有可能的组合。
当运行此程序时,它将打印出所有有效的括号组合,并验证生成的组合数量是否为n-1对。在这个例子中,n为3,所以会生成恰好2对有效的括号组合。

在这里插入图片描述

在这里插入图片描述

通义千问:

在数学和计算机科学中,一个“完全括号化”问题通常是指将n对左右括号合理排列以形成有效的数学表达式的问题。例如,对于3个元素,可能的完全括号化包括 “()()()” 和 “(())()” 等。

要证明对n个元素的表达式进行完全括号化时,恰好需要n-1对括号才能构成一个有效的括号序列,我们可以采用归纳法:

  1. 基础步骤:

    • 当 n = 1 时,只有一个元素,不需要括号来形成有效的表达式,但为了统一规则,我们可以认为它隐含有一对不显现的括号,即 “”(空字符串),所以这里“恰好”有 0 对括号用于包含这一个元素。
  2. 归纳步骤:

    • 假设对于任意 k (k < n),k 个元素的完全括号化需要 k-1 对括号。
    • 考虑 n 个元素的情况,为了形成一个新的有效括号序列,我们需要添加新的一对括号来包裹之前某个 k 个元素的完全括号化子序列(根据归纳假设,这个子序列用了 k-1 对括号)和剩下的 n-k 个元素形成的另一个完全括号化子序列(同样也会用到 n-k-1 对括号)。
    • 因此,整个序列包含了先前的 k-1 对加上新的1对,以及剩余部分的 n-k-1 对括号,总共是 (k-1) + 1 + (n-k-1) = n-1 对括号。

综上所述,无论 n 大于等于1还是更大数据,每次增加一个元素都需要增加一对括号来保持有效性,并且最内层的新括号对使得总括号数比元素数少1。因此,对 n 个元素的表达式进行完全括号化时,恰好需要 n-1 对括号。

在这里插入图片描述

天工:

在数学中,一个完全括号化的表达式是指所有的操作符都被括号正确地包围起来,以确保运算顺序。对于n个元素的表达式进行完全括号化,我们可以通过递归的方法来证明需要n-1对括号。

首先,我们考虑最简单的情况:只有一个元素的表达式。显然,不需要任何括号来完全括号化它。

接下来,我们考虑有两个元素的表达式,比如a * b。这个表达式需要一对括号来确保乘法操作优先于其他可能的操作,所以需要1对括号。

现在,我们来看有三个元素的表达式,比如a + b * c。为了确保b * c这部分先计算,我们需要在ab * c之间加上一对括号,得到(a + (b * c))。这样,我们就使用了2对括号。但是,如果我们想要a + b先计算,我们可以写成((a + b) * c),这样又用了2对括号。因此,对于三个元素的表达式,我们可以通过不同的方式使用2对括号来实现完全括号化。

一般地,对于n个元素的表达式,我们可以将其分为两部分:前n-1个元素和最后一个元素。前n-1个元素可以通过递归地完全括号化,需要n-2对括号。然后,我们需要决定如何与最后一个元素结合。无论我们选择哪种方式,都至少需要再加一对括号。因此,总共需要的括号对数是n-2+1=n-1对。

综上所述,对于n个元素的表达式进行完全括号化,恰好需要n-1对括号。

在这里插入图片描述

灵小智,代码正常运行:

使用Go语言可以通过递归来证明对 n 个元素的表达式进行完全括号化需要 n-1 对括号。下面是一个演示代码:
package main

import (
	"fmt"
	"strings"
)

// 递归函数,参数n表示剩余要添加括号的元素数量
func generateParenthesis(n int) []string {
	result := make([]string, 0)
	if n == 0 {
		result = append(result, "") // 若元素数量为0,则返回空字符串
	} else {
		for i := 0; i < n; i++ {
			left := generateParenthesis(i)        // 生成左边括号的所有可能
			right := generateParenthesis(n - 1 - i) // 生成右边括号的所有可能
			for _, l := range left {
				for _, r := range right {
					result = append(result, "("+l+")"+r) // 组合左右括号的所有可能
				}
			}
		}
	}
	return result
}

func main() {
	n := 4 // 设置元素数量为4
	expression := strings.Repeat("a", n) // 生成由'a'组成的表达式
	parentheses := generateParenthesis(n) // 生成所有可能的括号组合

	fmt.Println("要进行完全括号化的表达式:", expression)
	fmt.Println("括号组合:", parentheses)
	fmt.Println("括号对数量:", len(parentheses))
	fmt.Println("是否满足 n-1 对括号:", len(parentheses) == n-1)
}

上述代码中的 generateParenthesis 函数使用递归的方式生成所有可能的括号组合。在 main 函数中,我们设置了元素数量为 4,并生成由 ‘a’ 组成的表达式。然后,使用 generateParenthesis 生成所有可能的括号组合,并输出括号对数量。最后,判断括号对数量是否满足 n-1 的关系。

运行以上代码,你会发现对于 n=4 的情况,生成的括号组合有 3 对,符合 n-1 的关系,证明了对 n 个元素的表达式进行完全括号化需要 n-1 对括号。

在这里插入图片描述

在这里插入图片描述

chatgpt,代码正常运行:

下面是用Go语言实现的一个例子,来证明对 n 个元素的表达式进行完全括号化时,需要 n-1 对括号。

package main

import (
	"fmt"
)

func generateParenthesis(n int) {
	if n <= 0 {
		return
	}

	parentheses := make([]rune, n*2)
	generateHelper(parentheses, 0, 0, 0)
}

func generateHelper(parentheses []rune, pos int, openCount int, closeCount int) {
	if closeCount == len(parentheses)/2 {
		fmt.Println(string(parentheses))
		return
	}

	if openCount > closeCount {
		parentheses[pos] = ')'
		generateHelper(parentheses, pos+1, openCount, closeCount+1)
	}

	if openCount < len(parentheses)/2 {
		parentheses[pos] = '('
		generateHelper(parentheses, pos+1, openCount+1, closeCount)
	}
}

func main() {
	n := 4 // 设置要生成的括号对数

	generateParenthesis(n)
}

在这个例子中,我们通过递归生成所有可能的完全括号化的表达式,并打印出来。运行该程序会输出如下结果:

((()))
(()())
(())()
()(())
()()()

可以观察到,在输入为4时,一共有4-1=3对括号。因此,证明了对于 n 个元素的表达式进行完全括号化时,需要 n-1 对括号。

在这里插入图片描述

在这里插入图片描述

kimi,代码正常运行:

在 Go 语言中,我们可以通过编写一个简单的程序来证明对于 n 个元素的表达式进行完全括号化,恰好需要 n-1 对括号。这个证明可以通过递归的方式来实现,即对于任何子表达式,我们都需要在子表达式的每个元素之间添加括号。

以下是一个 Go 语言的示例程序,它使用递归来为一个表达式的每个元素添加括号,并计算所需的括号总数:

package main

import "fmt"

// 递归函数,用于为表达式添加括号
func addParentheses(expression []string, index int, count *int) {
	if index == len(expression) {
		// 如果已经到达表达式的末尾,输出当前括号数量
		fmt.Println("Total parentheses needed:", *count)
		return
	}

	// 为当前元素添加括号,并递归处理剩余的表达式
	*count++
	fmt.Print("(", expression[index], ")")
	addParentheses(expression, index+1, count)

	// 不添加括号,直接递归处理剩余的表达式
	fmt.Print(expression[index])
	addParentheses(expression, index+1, count)
}

func main() {
	expression := []string{"A", "B", "C", "D"} // 假设的表达式元素
	var count int = 0 // 用于跟踪括号数量
	addParentheses(expression, 0, &count)
}

在这个程序中,addParentheses 函数递归地为表达式的每个元素添加括号。每次递归调用时,我们都会在当前元素前添加一个左括号,并在递归返回时添加一个右括号。这样,对于每个元素,我们都有两种选择:为它添加括号或不添加括号。但是,为了完全括号化整个表达式,我们必须为每个元素添加至少一对括号。

当我们运行这个程序时,它会输出所需的括号总数,对于 n 个元素的表达式,这个总数将是 n-1。这是因为我们有 n 个元素,每个元素都需要一对括号,但整个表达式作为一个整体只需要一个外层的括号,所以总共需要 n-1 对括号。

在这里插入图片描述

在这里插入图片描述

混元:

要证明对n个元素的表达式进行完全括号化恰好需要n-1对括号,我们可以使用数学归纳法。

首先,我们观察基本情况,即当n=1时:
只有一个元素,不需要任何括号。此时,我们有0对括号,满足0 = 1 - 1。

现在,假设对于某个数k,我们有k个元素的表达式进行完全括号化需要k-1对括号。接下来,我们需要证明对于k+1个元素的表达式进行完全括号化恰好需要k对括号。

考虑一个具有k+1个元素的表达式。我们可以选择其中任意两个相邻的元素,并将它们用括号括起来。这样,我们就将原始表达式分成了一个包含这两个元素的子表达式和一个包含其余k-1个元素的子表达式。

根据我们的归纳假设,包含k-1个元素的子表达式需要k-2对括号。而包含两个元素的子表达式需要1对括号。因此,整个表达式需要(k-2)+ 1 = k-1对括号。

所以,对于k+1个元素的表达式进行完全括号化恰好需要k对括号。通过数学归纳法,我们已经证明了这一结论对所有正整数n成立。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/408391.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

将yolov8权重文件转为onnx格式并在c#中使用

yolo模型转ONNX 在yolov8中&#xff0c;我们将训练结果的.pt权重文件转换为onnx格式只需要使用ultralytics库中的YOLO类&#xff0c;使用pip安装ultralytics库&#xff0c;然后执行下面python代码 from ultralytics import YOLO# 加载YOLOv8模型 model YOLO("best.pt&q…

听力障碍的康复训练方法有哪些?

康复小知识 回声复语教育科技研究院 知识分享 听力障碍/概况 听力障碍是指“由于各种原因导致双耳不同程度的永久性听力障碍&#xff0c;听不到或听不清周围环境及言语声&#xff0c;以致影响日常生活和社会参与”。 聋儿的语言器官本身并不存在问题&#xff0c;通过现代科学…

数据结构链表力扣例题AC(3)——代码以及思路记录

160. 相交链表 给你两个单链表的头节点 headA 和 headB &#xff0c;请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点&#xff0c;返回 null 。 AC写法一 struct ListNode *getIntersectionNode(struct ListNode *headA, struct ListNode *headB) {//思…

利用LaTex批量将eps转pdf、png转eps、eps转png、eps转svg、pdf转eps

1、eps转pdf 直接使用epstopdf命令&#xff08;texlive、mitex自带&#xff09;。 在cmd中进入到eps矢量图片的目录&#xff0c;使用下面的命令&#xff1a; for %f in (*.eps) do epstopdf "%f" 下面是plt保存eps代码&#xff1a; import matplotlib.pyplot as…

嵌入式中数据结构二叉树详解与实现

树是数据结构中的重中之重&#xff0c;尤其以各类二叉树为学习的难点。在面试环节中&#xff0c;二叉树也是必考的模块。本文主要讲二叉树操作的相关知识&#xff0c;梳理面试常考的内容。请大家跟随小编一起来复习吧。 本篇针对面试中常见的二叉树操作作个总结&#xff1a; 前…

分享从零开始学习网络设备配置--任务5.1 组建直连式二层无线局域网

任务要求 &#xff08;1&#xff09;组建直连式二层无线局域网&#xff0c;网络拓扑图如图 &#xff08;3&#xff09;路由器、交换机和AC等网络设备端口IP地址规划如表 &#xff08;4&#xff09;组建直连式二层无线局域网&#xff0c;配置AP上线、WLAN业务参数和实现STA能正…

程序员的副业发展

前言 之前总有小伙伴问我&#xff0c;现在没有工作&#xff0c;或者想在空闲时间做一些程序员兼职&#xff0c;怎么做&#xff0c;做什么&#xff0c;能赚点外快 因为我之前发别的文章的时候有捎带着说过一嘴我做一些副业&#xff0c;这里就说一下我是怎么做的&#xff0c;都…

es6 中的生成器 generator / 迭代器 / async /await 到底是个啥,使用场景

生成器 generator 到底是个啥 是一个函数 可以用来遍历数据结构是解决异步编程的一种方案进行数据流的生成和控制协程和状态机返回一个生成器对象/可迭代对象 生成器对象&#xff1a; 生成器对象是由生成器函数返回的对象&#xff0c;它符合迭代器协议&#xff08;Iterator Pr…

异步框架Celery在Django中的运用

参考博客&#xff1a;https://www.cnblogs.com/pyedu/p/12461819.html 参考视频&#xff1a;01 celery的工作机制_哔哩哔哩_bilibili 定义&#xff1a;简单灵活、处理大量消息的分布式系统&#xff0c;专注于实时处理异步队列&#xff0c;支持任务调度 主要架构&#xff1a; …

【C++那些事儿】C++入门 | 命名空间 | 缺省参数 | 引用 | 内联函数 | auto关键字 | 范围for循环 | nullptr

&#x1f4f7; 江池俊&#xff1a; 个人主页 &#x1f525;个人专栏&#xff1a; ✅数据结构冒险记 ✅C那些事儿 &#x1f305; 有航道的人&#xff0c;再渺小也不会迷途。 文章目录 前言1. C关键字(C98)2. 命名空间2.1 命名空间定义2.2 命名空间使用 3. C输入&输出4. 缺…

【Linux基础】vim、常用指令、组管理和组权限

Linux基础 1、目录结构2、vi和vim3、常用指令运行级别找回密码帮助指令时间日期指令搜索查找文件目录操作磁盘管理指令压缩和解压缩 4、组管理和组权限用户操作指令权限 1、目录结构 Linux的文件系统是采用级层式的树状目录结构&#xff0c;在此结构中的最上层是根目录“/”&a…

StarRocks——滴滴OLAP的技术实践与发展方向

原文大佬的这篇StarRocks实践文章整体写的很深入&#xff0c;介绍了StarRocks数仓架构设计、物化视图加速实时看板、全局字典精确去重等内容&#xff0c;这里直接摘抄下来用作学习和知识沉淀。 目录 一、背景介绍 1.1 滴滴OLAP的发展历程 1.2 OLAP引擎存在的痛点 1.2.1 运维…

K线实战分析系列之十:市场进入犹豫不定状态——孕线形态

K线实战分析系列之十&#xff1a;市场进入犹豫不定状态——孕线形态 一、重要反转形态二、其他反转形态三、孕线形态四、孕线形态和吞没形态的区别五、十字孕线形态六、总结孕线形态 一、重要反转形态 伞形线吞没形态乌云盖顶刺透形态启明星形态黄昏星形态十字启明星与十字黄昏…

Java之线程池:线程池常用类、接口;线程池执行流程,配置参数,分类

线程池 什么是线程池&#xff1f; 线程池&#xff1a;一种基于池化思想管理和使用线程的机制 线程池常用类和接口 ExecutorService接口&#xff1a;进行线程池的操作访问Executors类&#xff1a;创建线程池的工具类ThreadPoolExecutor及其子类&#xff1a;封装线程池的核心参…

K线实战分析系列之九:顶底判断——流星和倒锤子线

K线实战分析系列之九&#xff1a;顶底判断——流星和倒锤子线 一、流星线二、倒锤子线三、总结流星形态和倒锤子形态 一、流星线 主要特征是实体比较小&#xff0c;位于低端位置&#xff0c;带着长上影线&#xff0c;就像流星划过天际时&#xff0c;拖着一个长长的尾巴&#xf…

Unity(第三部)新手绘制地形

1、创建地形 游戏对象3d对象地形 2、功能 1、 红框内按键为创建相邻地形、点击后相近地形会呈现高亮框、点击高亮区域可以快速创建地形 每块地形面积是1km*1km 2、第二个按钮是修改地形 下面的选择是修改类型 选项含义描述Raise or Lower Terrain升高或降低地形单击左键可…

STM32 TCP实现OTA

芯片&#xff1a;stm32f407 开发平台&#xff1a;stm32cubeide 上位机开发平台&#xff1a;visual studio 2017 1. FLASH分配 将flash划分为四个部分&#xff1a; bootloader: 0x8000000-0x800ffff app1: 0x8010000-0x805ffff app2: …

GEE入门篇|遥感专业术语(实践操作3):时间分辨率(Temporal Resolution)

目录 时间分辨率&#xff08;Temporal Resolution&#xff09; 1.Landsat 2.Sentinel-2 时间分辨率&#xff08;Temporal Resolution&#xff09; 时间分辨率是指特定传感器图像流的重访时间或时间节奏&#xff0c;重访时间是指卫星连续访问地球表面同一位置…

程序员副业接单做私活避坑指南

最近有不少读者私信我想接私活&#xff0c;想赚外快。 这篇文章系统的分享了对接单做私活这件事情的思考&#xff0c;也给出一些干货建议。希望让大家少走一些弯路&#xff0c;不要被坑。 先说结论 不建议大家在接单这个事情上投入太大精力&#xff0c;如果你“贼心不改”&am…

Nginx基本操作

目录 引言 一、Nginx配置文件详解 &#xff08;一&#xff09;配置文件 &#xff08;二&#xff09;模块 二、全局配置文件 &#xff08;一&#xff09;关闭版本或修改版本 1.关闭版本号 2.修改版本信息 &#xff08;二&#xff09;修改启动的进程数 &#xff08;三&…