端午安康(Python)

article/2025/6/18 8:59:31

 端午节总算是回家了,感觉时间过得真快,马上就毕业了,用Python弄了一个端午节元素的界面,虽然有点不像,祝大家端午安康。端午节粽子(python)_python画粽子-CSDN博客https://blog.csdn.net/weixin_64066303/article/details/131338766?spm=1001.2014.3001.5502

import tkinter as tk
from tkinter import messagebox, Canvas
import random
import math# 端午节祝福语库
blessings = ["粽叶飘香五月五,浓情端午送祝福\n愿你生活如粽甜,幸福美满永安康!","艾叶香,麦浪黄,人间美景是端阳\n愿您事业龙舟竞渡,生活粽享幸福!","五色丝线系吉祥,一枚香囊保安康\n祝您端午时节诸事顺,美好生活万年长!","龙舟破浪勇向前,糯米粘粘情相连\n愿您前程似锦赛龙舟,好运连连粽相伴!","青青粽叶盈,赤赤枣香浓\n愿您端午安康,幸福永长!","彩线轻缠红玉臂,小符斜挂绿云鬟\n祝您端午吉祥,万事如意!"
]
# 全局常量
SCREEN_WIDTH = 1000
SCREEN_HEIGHT = 700
paddle_angle = 0class DragonBoat:def __init__(self, canvas):self.canvas = canvasself.SCREEN_WIDTH = SCREEN_WIDTHself.SCREEN_HEIGHT = SCREEN_HEIGHTself.x = -200self.y = SCREEN_HEIGHT * 0.7self.speed = max(1.0, SCREEN_WIDTH / 400)self.parts = []# 新增划手动画所需变量self.paddles = []  # 存储桨线段对象self.paddle_blades = []  # ✅ 添加这一行:存储桨叶对象self.paddle_angles = []  # 每个桨的角度self.paddle_angle_speeds = []  # 每个桨的摆动速度# 新增龙须变量self.beards = []  # 存储龙须线段对象self.beard_angles = []  # 每根龙须的角度偏移self.beard_oscillation_speed = 0.03  # 降低摆动速度self.beard_oscillation_amplitude = 2  # 减小摆动幅度self.create_boat()def create_boat(self):# 船体boat_size = max(30.0, self.SCREEN_WIDTH / 20.0)  # 根据屏幕大小调整船体尺寸hull = self.canvas.create_polygon(self.x, self.y,self.x - boat_size * 3, self.y + boat_size,self.x - boat_size * 2, self.y + boat_size * 2,self.x + boat_size * 2, self.y + boat_size * 2,self.x + boat_size * 3, self.y + boat_size,self.x, self.y,fill="#CD5C5C", outline="black", width=2, smooth=True)self.parts.append(hull)# 龙头head = self.canvas.create_polygon(self.x + boat_size * 3, self.y + boat_size,self.x + boat_size * 4, self.y + boat_size * 0.5,self.x + boat_size * 4.5, self.y + boat_size * 0.75,self.x + boat_size * 4.25, self.y + boat_size * 1.25,self.x + boat_size * 4, self.y + boat_size * 1.75,self.x + boat_size * 3.5, self.y + boat_size * 1.75,self.x + boat_size * 3, self.y + boat_size,fill="#8B0000", outline="black", width=2, smooth=True)self.parts.append(head)# 龙眼eye_size = max(2.0, boat_size / 10)eye = self.canvas.create_oval(self.x + boat_size * 4.1, self.y + boat_size * 0.875,self.x + boat_size * 4.25, self.y + boat_size,fill="white", outline="black")self.parts.append(eye)pupil = self.canvas.create_oval(self.x + boat_size * 4.13, self.y + boat_size * 0.9,self.x + boat_size * 4.17, self.y + boat_size * 0.95,fill="black")self.parts.append(pupil)# 龙角horn1 = self.canvas.create_polygon(self.x + boat_size * 4.25, self.y + boat_size * 0.75,self.x + boat_size * 4.375, self.y + boat_size * 0.375,self.x + boat_size * 4.5, self.y + boat_size * 0.5,self.x + boat_size * 4.25, self.y + boat_size * 0.75,fill="#8B4513", outline="black")horn2 = self.canvas.create_polygon(self.x + boat_size * 4, self.y + boat_size * 0.5,self.x + boat_size * 4.125, self.y + boat_size * 0.25,self.x + boat_size * 4.25, self.y + boat_size * 0.375,self.x + boat_size * 4, self.y + boat_size * 0.5,fill="#8B4513", outline="black")self.parts.extend([horn1, horn2])# 龙须beard1 = self.canvas.create_line(self.x + boat_size * 3.9, self.y + boat_size * 1.1,self.x + boat_size * 3.95, self.y + boat_size * 1.05,  # 缩短距离self.x + boat_size * 4.0, self.y + boat_size * 0.95,fill="gold", width=2, smooth=False)beard2 = self.canvas.create_line(self.x + boat_size * 3.9, self.y + boat_size * 1.3,self.x + boat_size * 3.95, self.y + boat_size * 1.35,self.x + boat_size * 4.0, self.y + boat_size * 1.4,fill="gold", width=2, smooth=False)self.parts.extend([beard1, beard2])self.beards.extend([beard1, beard2])# 初始化龙须摆动角度for _ in range(len(self.beards)):self.beard_angles.append(random.uniform(0, math.pi * 2))# 划桨手num_rowers = max(3, int(SCREEN_HEIGHT / 200))  # 根据屏幕宽度调整划手数量for i in range(num_rowers):rower_x = self.x - boat_size * 2 + i * (boat_size * 1.5)# 身体位置 - 在船体内部body_y = self.y + boat_size * 0.8  # 降低身体位置# 身体body = self.canvas.create_oval(rower_x, body_y,rower_x + boat_size * 0.375, body_y + boat_size * 0.5,fill="#FFD700")# 头部head = self.canvas.create_oval(rower_x + boat_size * 0.075, body_y - boat_size * 0.4,rower_x + boat_size * 0.3, body_y,fill="#FFDEAD")# 桨 - 修复位置问题# 桨柄位置在划手身体中间paddle_x = rower_x + boat_size * 0.1875paddle_y = body_y + boat_size * 0.25# 桨长度paddle_length = boat_size * random.uniform(1.5, 2.5)angle_deg = 30 + math.sin(paddle_angle) * 10  # 动态角度# 桨的角度 - 稍微向下倾斜paddle_end_x = paddle_x + paddle_length * math.cos(math.radians(angle_deg))paddle_end_y = paddle_y + paddle_length * math.sin(math.radians(angle_deg))# 绘制船桨paddle = self.canvas.create_line(paddle_x, paddle_y,paddle_end_x, paddle_end_y,fill="#8B4513", width=3)# 绘制桨叶paddle_blade = self.canvas.create_polygon(paddle_end_x, paddle_end_y,paddle_end_x + boat_size * 0.2, paddle_end_y + boat_size * 0.1,paddle_end_x + boat_size * 0.2, paddle_end_y - boat_size * 0.1,paddle_end_x, paddle_end_y,fill="#8B4513", outline="black")self.parts.extend([body, head, paddle, paddle_blade])# 在创建桨后保存引用self.paddles.append(paddle)  # paddle 是 line 对象self.paddle_blades.append(paddle_blade)  # 这是关键!self.paddle_angles.append(random.uniform(0, math.pi * 2))  # 初始角度self.paddle_angle_speeds.append(random.uniform(0.05, 0.1))  # 摆动速度def move(self):for item in self.parts:self.canvas.move(item, self.speed, 0)self.x += self.speedif self.x > self.SCREEN_WIDTH + 200:self.reset_position()return# 更新每个桨的角度for i in range(len(self.paddles)):try:self.paddle_angles[i] += self.paddle_angle_speeds[i]# 获取桨起点coords = self.canvas.coords(self.paddles[i])if not coords:continuepaddle_x, paddle_y = coords[0], coords[1]# 计算新终点angle_deg = 30 + math.sin(self.paddle_angles[i]) * 15paddle_length = 60  # 固定长度或根据 boat_size 调整paddle_end_x = paddle_x + paddle_length * math.cos(math.radians(angle_deg))paddle_end_y = paddle_y + paddle_length * math.sin(math.radians(angle_deg))# 更新桨线段self.canvas.coords(self.paddles[i],paddle_x, paddle_y,paddle_end_x, paddle_end_y)# 更新桨叶(如果存在)if i < len(self.paddle_blades) and self.paddle_blades[i]:self.canvas.coords(self.paddle_blades[i],paddle_end_x, paddle_end_y,paddle_end_x + 10, paddle_end_y + 5,paddle_end_x + 10, paddle_end_y - 5,paddle_end_x, paddle_end_y)except IndexError:continue  # 忽略越界索引# ✅ 更新龙须的摆动动画global paddle_anglefor i in range(len(self.beards)):coords = self.canvas.coords(self.beards[i])if not coords or len(coords) < 6:  # 确保有3个点(6个坐标)continuex1, y1, mid_x, mid_y, x2, y2 = coords# ✅ 使用全局 paddle_angle 控制龙须摆动# 计算端点摆动end_offset = math.sin(paddle_angle + i * 0.5) * self.beard_oscillation_amplitudenew_x2 = x2 + end_offset * 0.5new_y2 = y2 + end_offset * 0.5# 对中间点增加小幅摆动mid_offset = math.sin(paddle_angle + i * 0.5) * self.beard_oscillation_amplitude * 0.3new_mid_x = mid_x + mid_offset * 0.2new_mid_y = mid_y + mid_offset * 0.2# 更新三个点坐标(形成折线)self.canvas.coords(self.beards[i],x1, y1,new_mid_x, new_mid_y,  # 中间点坐标new_x2, new_y2)def reset_position(self):for item in self.parts:self.canvas.delete(item)self.parts = []self.x = -200self.y = self.SCREEN_HEIGHT * 0.7self.speed = max(1.0, self.SCREEN_WIDTH / 400)self.create_boat()class FloatingZongzi:def __init__(self, canvas):self.canvas = canvasself.SCREEN_WIDTH = SCREEN_WIDTHself.SCREEN_HEIGHT = SCREEN_HEIGHT# 确保使用整数参数min_y = int(SCREEN_HEIGHT * 0.7)max_y = int(SCREEN_HEIGHT - 50)self.x = random.randint(50, SCREEN_WIDTH - 50)self.y = random.randint(min_y, max_y) if min_y < max_y else min_yself.size = random.randint(max(10, int(SCREEN_WIDTH / 80)),max(20, int(SCREEN_WIDTH / 40)))self.speed = random.uniform(0.3, 1.0)self.direction = random.choice([-1, 1])self.zongzi = self.create_zongzi()def create_zongzi(self):# 粽体body = self.canvas.create_polygon(self.x, self.y,self.x - self.size / 2, self.y + self.size,self.x + self.size / 2, self.y + self.size,self.x, self.y,fill="#3CB371", outline="black", width=1, smooth=True)# 粽叶纹理for i in range(3):y_offset = self.y + (i + 1) * self.size / 4line = self.canvas.create_line(self.x - self.size / 2 + 5, y_offset,self.x + self.size / 2 - 5, y_offset,fill="#2E8B57", width=1)# 绑绳rope_y = self.y + self.size * 0.7rope = self.canvas.create_line(self.x - self.size / 2, rope_y,self.x + self.size / 2, rope_y,fill="#8B4513", width=2)return [body, rope]def move(self):self.y -= self.speedself.x += self.speed * self.direction * 0.3for item in self.zongzi:self.canvas.move(item, self.speed * self.direction * 0.3, -self.speed)# 如果飘出屏幕,重置位置if self.y < -50:self.reset_position()def reset_position(self):for item in self.zongzi:self.canvas.delete(item)self.x = random.randint(50, self.SCREEN_WIDTH - 50)self.y = self.SCREEN_HEIGHT + 50self.zongzi = self.create_zongzi()def show_blessing():"""显示随机祝福"""blessing = random.choice(blessings)messagebox.showinfo("端午安康", blessing)def create_background(canvas):"""创建自适应背景"""# 清除现有背景canvas.delete("background")# 渐变天空for i in range(int(SCREEN_HEIGHT * 0.7)):y = iblue_value = max(100.0, 235 - i * 0.7)color = f"#87CE{int(blue_value):02X}"canvas.create_line(0, y, SCREEN_WIDTH, y, fill=color, width=1, tags="background")# 水面canvas.create_rectangle(0, SCREEN_HEIGHT * 0.7,SCREEN_WIDTH, SCREEN_HEIGHT,fill="#1E90FF", outline="", tags="background")# 远山num_mountains = max(3, int(SCREEN_WIDTH / 200))for i in range(num_mountains):x_start = i * (SCREEN_WIDTH / num_mountains) - 100height = random.randint(int(SCREEN_HEIGHT * 0.1), int(SCREEN_HEIGHT * 0.2))points = [x_start, SCREEN_HEIGHT * 0.7]segments = 5for j in range(segments):points.extend([x_start + j * (SCREEN_WIDTH / num_mountains / segments),SCREEN_HEIGHT * 0.7 - random.randint(20, height)])points.extend([x_start + SCREEN_WIDTH / num_mountains, SCREEN_HEIGHT * 0.7])canvas.create_polygon(points, fill="#228B22", outline="#006400", smooth=True, tags="background")# 水波纹wave_height = min(10.0, SCREEN_HEIGHT * 0.02)for i in range(int(SCREEN_HEIGHT * 0.3 / 10)):y = SCREEN_HEIGHT * 0.7 + i * 10for j in range(int(SCREEN_WIDTH / 40)):x_start = j * 40canvas.create_arc(x_start, y,x_start + 40, y + wave_height * 2,start=180, extent=-180,outline="#87CEEB", width=1, tags="background")def create_title(canvas):"""创建自适应标题"""canvas.delete("title")canvas.create_text(SCREEN_WIDTH / 2, SCREEN_HEIGHT * 0.15,text="端午节安康",font=("楷体", 36, "bold"),fill="#B22222",activefill="#FF4500",tags="title")# 装饰花纹for i in range(8):angle = i * math.pi / 4radius = min(150.0, SCREEN_WIDTH / 8)x = SCREEN_WIDTH / 2 + radius * math.cos(angle)y = SCREEN_HEIGHT * 0.15 + radius * math.sin(angle)canvas.create_line(SCREEN_WIDTH / 2, SCREEN_HEIGHT * 0.15, x, y, fill="gold", width=2, dash=(4, 4),tags="title")# 装饰粽子size = max(10.0, min(20.0, SCREEN_WIDTH / 60))zongzi = canvas.create_polygon(x, y,x - size / 2, y + size,x + size / 2, y + size,x, y,fill="#3CB371", outline="black", width=1, tags="title")# 装饰艾草if i % 2 == 0:canvas.create_line(x, y, x, y - size * 2, fill="#228B22", width=3, tags="title")canvas.create_line(x, y - size * 2, x - size, y - size * 3, fill="#228B22", width=2, tags="title")canvas.create_line(x, y - size * 2, x + size, y - size * 3, fill="#228B22", width=2, tags="title")def create_button(canvas):"""创建自适应按钮"""canvas.delete("button")button_width = 100button_height = 50button_x = SCREEN_WIDTH / 2 - button_width / 2button_y = SCREEN_HEIGHT * 0.85button_bg = canvas.create_rectangle(button_x, button_y,button_x + button_width, button_y + button_height,fill="#FFD700", outline="#8B0000", width=2, tags="button")button_text = canvas.create_text(SCREEN_WIDTH / 2, button_y + button_height / 2,text="端午祝福",font=("微软雅黑", 18, "bold"),fill="#8B0000",tags="button")# 绑定事件canvas.tag_bind(button_bg, "<Button-1>", lambda e: show_blessing())canvas.tag_bind(button_text, "<Button-1>", lambda e: show_blessing())# 添加悬停效果def on_enter(e):canvas.itemconfig(button_bg, fill="#FFA500")def on_leave(e):canvas.itemconfig(button_bg, fill="#FFD700")canvas.tag_bind(button_bg, "<Enter>", on_enter)canvas.tag_bind(button_bg, "<Leave>", on_leave)canvas.tag_bind(button_text, "<Enter>", on_enter)canvas.tag_bind(button_text, "<Leave>", on_leave)def center_window(root):"""将窗口置于屏幕中央"""root.update_idletasks()screen_width = root.winfo_screenwidth()screen_height = root.winfo_screenheight()x = (screen_width - SCREEN_WIDTH) // 2y = (screen_height - SCREEN_HEIGHT) // 4root.geometry(f"{SCREEN_WIDTH}x{SCREEN_HEIGHT}+{x}+{y}")def animate():"""动画循环"""global paddle_angledragon_boat.move()for zongzi in floating_zongzis:zongzi.move()paddle_angle += 0.1  # 控制摆动速度root.after(30, animate)# 创建主窗口
root = tk.Tk()
root.title("端午安康")
root.configure(bg="#F0F8FF")
root.resizable(False, False)# 创建画布
canvas = Canvas(root, width=SCREEN_WIDTH, height=SCREEN_HEIGHT, bg="white", highlightthickness=0)
canvas.pack()# 初始化元素
create_background(canvas)
create_title(canvas)
create_button(canvas)# 初始化动画元素
dragon_boat = DragonBoat(canvas)
floating_zongzis = [FloatingZongzi(canvas) for _ in range(10)]# 窗口居中
center_window(root)# 开始动画
animate()root.mainloop()


http://www.hkcw.cn/article/WixAmucWEx.shtml

相关文章

10.安卓逆向2-frida hook技术-frida基本使用-frida指令(用于hook)

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 内容参考于&#xff1a;图灵Python学院 工具下载&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1bb8NhJc9eTuLzQr39lF55Q?pwdzy89 提取码&#xff1…

# CppCon 2014 学习: Quick game development with C++11/C++14

这是一个关于游戏开发与现代 C&#xff08;尤其是 C11/C14&#xff09;结合的技术分享或讲座的概要&#xff0c;结构清晰、内容分为几个部分&#xff1a; About This Talk — 内容结构 1. 导言部分&#xff08;Introductory part&#xff09; 介绍为什么选择游戏开发作为主题…

vscode不满足先决条件问题的解决——vscode的老版本安装与禁止更新(附安装包)

目录 起因 vscode更新设置的关闭 安装包 结语 起因 由于主包用的系统是centos的&#xff0c;且版本有点老了&#xff0c;再加上vscode现在不支持老版本的&#xff0c;这对主包来说更是雪上加霜啊 但是主包看了网上很多教程&#xff0c;眼花缭乱&#xff0c;好多配置要改&…

如何手搓扫雷(待扩展)

文章目录 一、扫雷游戏分析与设计1.1 扫雷游戏的功能说明1.2 游戏的分析和设计1.2.1 数据结构的分析1.2.2 文件结构设计 二、扫雷游戏的代码实现三、扫雷游戏的扩展总结 一、扫雷游戏分析与设计 扫雷游戏网页版 1.1 扫雷游戏的功能说明 使用控制台&#xff08;黑框框的程序&a…

Python打卡训练营学习记录Day41

DAY 41 简单CNN 知识回顾 数据增强卷积神经网络定义的写法batch归一化&#xff1a;调整一个批次的分布&#xff0c;常用与图像数据特征图&#xff1a;只有卷积操作输出的才叫特征图调度器&#xff1a;直接修改基础学习率 卷积操作常见流程如下&#xff1a; 1. 输入 → 卷积层 →…

我们来学mysql -- mysql8.4主从

mysql8.4主从 8.4安装主从原理主my.cnf启动创建复制用户 从my.cnf启动锁库&迁移数据连接主&开启复制检查复制 8.4安装 参考保姆级安装教程传送门 主从原理 从库准备 使用 CHANGE MASTER TO 配置主库信息并写入 master.info 文件。执行 START SLAVE 启动从库&#xff…

kafka学习笔记(三、消费者Consumer使用教程——消费性能多线程提升思考)

1.简介 KafkaConsumer是非线程安全的&#xff0c;它定义了一个acquire()方法来检测当前是否只有一个线程在操作&#xff0c;如不是则会抛出ConcurrentModifcationException异常。 acquire()可以看做是一个轻量级锁&#xff0c;它仅通过线程操作计数标记的方式来检测线程是否发…

记忆胶囊应用源码纯开源

下载地址&#xff1a;https://pan.quark.cn/s/729681531125 &#x1f4f1; 应用功能特点 核心功能&#xff1a; 创建记忆胶囊 - 用户可以创建包含文本内容的时间胶囊时间设定 - 设置胶囊的开启时间情感标签 - 为记忆添加情感标记&#xff08;开心、难过、兴奋等&#xff09;…

破题城市更新 老旧街区如何新生?南京这样干→

暮春4月,经过十年更新改造的南京小西湖街区游人纷纷,老南京风貌从更新过的街巷中透出,市井烟火气里交织着现代时尚感。但是,略微向深处走走,年久失修的房屋,私搭乱建的建筑,让小西湖少了一分西湖的美,多了几分棚户的乱。王卉在小西湖出生长大,箍桶巷33号是父亲留给她的…

郑钦文今日战萨姆索诺娃 法网1/8决赛焦点

法网6月1日赛程已公布,郑钦文与萨姆索诺娃的比赛将在苏珊-朗格伦球场第二场进行,比赛时间不早于19点。当天是法网第八比赛日,将展开单打第四轮的较量。在苏珊-朗格伦球场的第一场比赛是保罗对阵波佩林的男单第四轮。从交手记录来看,萨姆索诺娃以3-2领先郑钦文。不过,在双方…

俄罗斯布良斯克州一桥梁坍塌 已致数十人伤亡

总台记者获悉,当地时间5月31日,位于俄罗斯布良斯克州的一座桥梁发生坍塌,导致当时行经桥下、由莫斯科开往该州城市克利莫沃的列车脱轨。据俄罗斯BAZA网站报道,事件造成4人死亡,至少44人受伤。据悉,死亡人员分别是火车司机、副司机和两名乘客。有媒体报道称,不明身份者在…

neo4j 5.19.0安装、apoc csv导入导出 及相关问题处理

前言 突然有需求需要用apoc 导入 低版本的图谱数据&#xff0c;网上资料又比较少&#xff0c;所以就看官网资料并处理了apoc 导入的一些问题。 相关地址 apoc 官方安装网址 apoc 官方导出csv 教程地址 apoc 官方 导入 csv 地址 docker 安装 执行如下命令启动镜像 doc…

【Linux】进程地址空间揭秘(初步认识)

10.进程地址空间&#xff08;初步认识&#xff09; 文章目录 10.进程地址空间&#xff08;初步认识&#xff09;一、进程地址空间的实验现象解析二、进程地址空间三、虚拟内存管理补充&#xff1a;数据的写时拷贝&#xff08;浅谈&#xff09;补充&#xff1a;页表&#xff08;…

SEO长尾关键词优化进阶指南

内容概要 在流量竞争日趋激烈的数字营销环境中&#xff0c;长尾关键词作为精准获客的核心入口&#xff0c;已成为SEO进阶优化的战略重点。本指南将系统梳理从用户意图识别到可持续流量增长的完整技术路径&#xff0c;围绕“需求挖掘-资源构建-竞争突围”三大核心模块展开。通过…

[网页五子棋][对战模块]实现游戏房间页面,服务器开发(创建落子请求/响应对象)

实现游戏房间页面 创建 css/game_room.css #screen 用于显示当前的状态&#xff0c;例如“等待玩家连接中…”&#xff0c;“轮到你落子”&#xff0c;“轮到对方落子”等 #screen { width: 450px; height: 50px; margin-top: 10px; color: #8f4e19; font-size: 28px; …

利用nginx完成iframe请求的身份认证

需求说明 在dify中搭建了一个chatflow&#xff0c;搭建完成后&#xff0c;将其以iframe的方式&#xff0c;嵌入到自己开发的一个网站中。 嵌入完成后&#xff0c;效果如下图所示&#xff1a; 此时存在一个安全问题&#xff0c;如果用户知道了这个iframe的URL地址&#xff0c;…

t017-高校实习管理系统 【含材料源码!!!】

项目演示视频 摘 要 如今社会上各行各业&#xff0c;都喜欢用自己行业的专属软件工作&#xff0c;互联网发展到这个时候&#xff0c;人们已经发现离不开了互联网。新技术的产生&#xff0c;往往能解决一些老技术的弊端问题。因为传统高校实习管理系统信息管理难度大&#xff0…

【项目】在线OJ(负载均衡式)

目录 一、项目目标 二、开发环境 1.技术栈 2.开发环境 三、项目树 目录结构 功能逻辑 编写思路 四、编码 1.complie_server 服务功能 代码蓝图 开发编译功能 日志功能 ​编辑 测试编译模块 开发运行功能 设置运行限制 jsoncpp 编写CR 如何生成唯一文件名 …

B3623 枚举排列(递归实现排列型枚举)

B3623 枚举排列&#xff08;递归实现排列型枚举&#xff09; - 洛谷 题目描述 今有 n 名学生&#xff0c;要从中选出 k 人排成一列拍照。 请按字典序输出所有可能的排列方式。 输入格式 仅一行&#xff0c;两个正整数 n,k。 输出格式 若干行&#xff0c;每行 k 个正整数…

深入探讨redis:主从复制

前言 如果某个服务器程序&#xff0c;只部署在一个物理服务器上就可能会面临一下问题(单点问题) 可用性问题&#xff0c;如果这个机器挂了&#xff0c;那么对应的客户端服务也相继断开性能/支持的并发量有限 所以为了解决这些问题&#xff0c;就要引入分布式系统&#xff0c…