当前位置: 首页 > news >正文

C++学习笔记(30)

二十三、随机数
在实际开发中,经常用到随机数,例如:纸牌的游戏洗牌和发牌、生成测试数据等。
函数原型:
void srand(unsigned int seed); // 初始化随机数生成器(播种子)。
int rand(); // 获一个取随机数。
随机数生成器使用前如果不初始化,每次获取的随机数是相同的,通常用当前时间的秒数(time(0)
函数的返回值)初始化随机数生成器。
功能需求:
写一个函数,随机生成 n 个整数,不允许重复。
函数原型:
void rrand(int arr[], const size_t len, const int minvalue=0);
rrand(arr, 10); // 5 3 2 1 4 6 9 8 7 0
rrand(arr, 10, 10); // 15 13 12 11 14 16 19 18 17 10
示例:
#include <iostream>
using namespace std;
void rrand(int arr[], const size_t len, const int minvalue = 0)
{
srand(time(0)); // 用当前时间(1970-1-1 到现在的秒数)作为随机数的种子。
for (int ii = 0; ii < len; ii++) {
while (true) {
// 获取一个随机数,但是,这个数值不一定是有效的,可能在数组 arr 中已存在。
int tmp = rand() % len + minvalue;
// 判断获取的随机数 tmp 是否已存在数组 arr 中。
int jj;
for (jj = 0; jj < ii; jj++) // 注意,这里只遍历数组中有效的元素就行了,不是整个
数组。
if (tmp == arr[jj]) break;
if (jj == ii) { // 如果 jj==ii,表示 tmp 不在数组 arr 中,把 tmp
存入 arr[ii]。
arr[ii] = tmp; break; // 跳出 while 循环。
}
}
}
}
int main()
{
int arr[10];
rrand(arr, 10);
for (int ii = 0; ii < 10; ii++)
cout << arr[ii] << " ";
cout << endl;
}
二十四、随机发牌
一副牌有 54 张,除掉大小王,还有 52 张,用 1-52 之间的数字表示,把它随机发给 4 个玩家。
函数原型:
// arr:每个玩家的牌面,第一维的大小是 4。
void dealcards(int arr[][13]);
要求:为了达到更好的随机效果,不能把洗好的牌按顺序发给玩家,要随机发放。
50 44 19 45 22 40 8 27 17 13 51 29 18 37 34 12 2 5 46 33 31 4 32 35 14 9 23 43 21
39 6 52 11 38 30 3 15 41 16 20 10 24 28 48 26 36 7 47 25 42 49 1
49 43 18 44 21 39 7 26 16 12 50 28 17 36 33 11 1 4 45 32 30 3 31 34 13 8 22 42 20
38 5 51 10 37 29 2 14 40 15 19 9 23 27 47 25 35 6 46 24 41 48 0
玩家一:42 4
玩家二:48
玩家三:46
玩家四:26
提示:可以利用上节课的成果,能达到发牌的效果就行了,代码不拘一格。
示例:
#include <iostream>
using namespace std;
void rrand(int arr[], const size_t len, const int minvalue = 0)
{
srand(time(0)); // 用当前时间(1970-1-1 到现在的秒数)作为随机数的种子。
for (int ii = 0; ii < len; ii++) {
while (true) {
// 获取一个随机数,但是,这个数值不一定是有效的,可能在数组 arr 中已存在。
int tmp = rand() % len + minvalue;
// 判断获取的随机数 tmp 是否已存在数组 arr 中。
int jj;
for (jj = 0; jj < ii; jj++) // 注意,这里只遍历数组中有效的元素就行了,不是整个
数组。
if (tmp == arr[jj]) break;
if (jj == ii) { // 如果 jj==ii,表示 tmp 不在数组 arr 中,把 tmp
存入 arr[ii]。
arr[ii] = tmp; break; // 跳出 while 循环。
}
}
}
}
// arr:每个玩家的牌面,第一维的大小是 3。
void dealcards(int arr[][13])
{
int arr1[52]; // 洗牌数组。
rrand(arr1, 52, 1); // 得到洗牌数组。
for (int ii = 0; ii < 52; ii++)
cout << arr1[ii] << " ";
cout << endl;
int arr2[52]; // 发牌数组。
rrand(arr2, 52); // 得到发牌顺序数组。
for (int ii = 0; ii < 52; ii++)
cout << arr2[ii] << " ";
cout << endl;
int jj = 0; // 已发牌的数组下标,从 0-51。
for (int ii = 0; ii < 13; ii++) // 一共发 13 轮。
{
arr[0][ii] = arr1[arr2[jj++]];
arr[1][ii] = arr1[arr2[jj++]];
arr[2][ii] = arr1[arr2[jj++]];
arr[3][ii] = arr1[arr2[jj++]];
}
}
int main()
{
int arr2[4][13];
dealcards(arr2);
for (int ii = 0; ii < 13; ii++)
cout << arr2[0][ii] << " ";
cout << endl;
for (int ii = 0; ii < 13; ii++)
cout << arr2[1][ii] << " ";
cout << endl;
for (int ii = 0; ii < 13; ii++)
cout << arr2[2][ii] << " ";
cout << endl;
for (int ii = 0; ii < 13; ii++)
cout << arr2[3][ii] << " ";
cout << endl;
cout << endl;
}
三十、静态顺序表
示例(数据元素为整数):
#include <iostream>
using namespace std;
#define MAXSIZE 100 // 顺序表的最大长度
typedef int ElemType; // 给数据元素的数据类型起个别名。
struct SeqList // 静态顺序表的结构体。
{
ElemType data[MAXSIZE]; // 用静态数组存储顺序表中的元素。
size_t length; // 顺序表的表长(有效元素的个数)。
};
// 清空顺序表。
void ClearList(SeqList& LL)
{
//LL.length = 0; // 表长置为 0。
//memset(LL.data, 0, sizeof(ElemType) * MAXSIZE); // 清空数组。
memset(&LL, 0, sizeof(SeqList)); // 清空结构体。
}
// 在顺序表 LL 的第 pos 个位置插入元素 ee,返回值:true-成功;false-失败。
// 注意:在数据结构中,位置 pos 从 1 开始,不是从 0 开始。
// 6 8 2 1 12 4 5 3 7 // 顺序表中的元素。
// 1 2 3 4 5 6 7 8 9 10 // 位置。
// 0 1 2 3 4 5 6 7 8 9 // 数组下标。
bool InsertList(SeqList& LL, const size_t pos, const ElemType& ee)
{
if (LL.length == MAXSIZE) { cout << "顺序表已满,不能插入。\n"; return false; }
// 判断位置 pos 是否合法。
if ((pos < 1) || (pos > LL.length + 1)) {
cout << "插入位置" << pos << "不合法,应该在 1-" << LL.length + 1 << "之间。\n";
return false;
}
// 把 pos 和 pos 之后的元素后移。
if (pos < LL.length + 1)
memmove(LL.data + pos, LL.data + pos - 1, (LL.length - pos + 1) * sizeof(ElemType));
// 把元素 ee 的值赋值给顺序表的第 pos 个元素。
//memcpy(&LL.data[pos - 1], &ee, sizeof(ElemType)); // 采用 memcpy 是为了兼容 ee 为
结构体的情况。
LL.data[pos - 1] = ee; // 在 C++中,结构体也可以用=赋值。
LL.length++; // 表长加 1。
return true;
}
// 求顺序表的表长,返回值表 LL 中元素的个数。
size_t LengthList(const SeqList& LL)
{
return LL.length;
}
// 获取顺序表中第 pos 个元素的值,存放在 ee 中,返回值:false-失败;true-成功。
bool GetElem(const SeqList LL, const size_t pos, ElemType& ee)
{
// 判断位置 pos 是否合法。
if ((pos < 1) || (pos > LL.length)) return false;
ee = LL.data[pos - 1];
return true;
}
// 在顺序表 LL 的头部插入元素 ee。
bool PushFront(SeqList& LL, const ElemType& ee)
{
return InsertList(LL, 1, ee);
}
// 在顺序表 LL 的尾部插入元素 ee。
bool PushBack(SeqList& LL, const ElemType& ee)
{
return InsertList(LL, LL.length + 1, ee);
}
// 查找 ee 在顺序表 LL 中的位置,返回值:0-元素 ee 在表 LL 中不存在,>0 元素 ee 在表 LL 中的
位置。
size_t FindElem(const SeqList& LL, const ElemType& ee)
{
for (size_t ii = 0; ii < LL.length; ii++)
{
// 如果元素 ee 为结构体,以下代码要修改(比较数据元素的关键字)。
if (LL.data[ii] == ee) return ii + 1;
}
return 0;
}
// 删除顺序表 LL 中的第 pos 个元素,返回值:0-位置 pos 不合法;1-成功。
bool DeleteElem(SeqList& LL, const size_t pos)
{
// 判断位置 pos 是否合法,注意,pos 从 1 开始,不是从 0 开始,0 不符合人类的习惯。
if ((pos < 1) || (pos > LL.length)) {
cout << "删除位置" << pos << "不合法,应该在 1-" << LL.length << "之间。\n";
return false;
}
// 把 pos 之后的元素前移。
memmove(&LL.data[pos - 1], &LL.data[pos], sizeof(ElemType) * (LL.length - pos));
LL.length--; // 表长减 1。
return true;
}
// 删除顺序表 LL 中头元素。
bool PopFront(SeqList& LL)
{
return DeleteElem(LL, 1);
}
// 删除顺序表 LL 中尾元素。
bool PopBack(SeqList& LL)
{
return DeleteElem(LL, LL.length);
}
// 判断顺序表是否为空,返回值:true-空,false-非空。
bool IsEmpty(const SeqList& LL)
{
if (LL.length == 0) return true;
return false;
}
// 显示顺序表中全部的元素。
void PrintList(const SeqList& LL)
{
if (LL.length == 0) { cout << "表为空。\n"; return; }
for (size_t ii = 0; ii < LL.length; ii++)
{
cout << LL.data[ii] << " ";
}
cout << endl;
}
int main()
{
SeqList LL; // 创建顺序表。
ClearList(LL); // 清空顺序表。
ElemType ee; // 创建一个数据元素。
cout << "在表中插入元素(1、2、3、4、5、6、7、8、9、10)。\n";
ee = 1; InsertList(LL, 1, ee);
ee = 2; InsertList(LL, 1, ee);
ee = 3; InsertList(LL, 1, ee);
ee = 4; InsertList(LL, 1, ee);
ee = 5; InsertList(LL, 1, ee);
ee = 6; InsertList(LL, 1, ee);
ee = 7; InsertList(LL, 1, ee);
ee = 8; InsertList(LL, 1, ee);
ee = 9; InsertList(LL, 1, ee);
ee = 10; InsertList(LL, 1, ee);
PrintList(LL);
cout << "在表头插入元素(11),表尾插入元素(12)。\n";
ee = 11; PushFront(LL, ee);
ee = 12; PushBack(LL, ee);
PrintList(LL);
cout << "在第 5 个位置插入元素(13)。\n";
ee = 13; InsertList(LL, 5, ee);
PrintList(LL);
cout << "删除表中第 7 个元素。\n";
DeleteElem(LL, 7); PrintList(LL);
cout << "删除表头元素。\n";
PopFront(LL); PrintList(LL);
cout << "删除表尾元素。\n";
PopBack(LL); PrintList(LL);
GetElem(LL, 5, ee);
cout << "第 5 个元素的值是" << ee << "。\n";
ee = 8;
cout << "元素值为 8 的位置是=" << FindElem(LL, ee) << endl;
}
示例(数据元素为结构体):
#include <iostream>
using namespace std;
#define MAXSIZE 100 // 顺序表的最大长度
typedef struct stgirl // 超女结构体。
{
int bh;
char name[21];
} ElemType; // 给数据元素的数据类型起个别名。
struct SeqList // 静态顺序表的结构体。
{
ElemType data[MAXSIZE]; // 用静态数组存储顺序表中的元素。
size_t length; // 顺序表的表长(有效元素的个数)。
};
// 清空顺序表。
void ClearList(SeqList& LL)
{
//LL.length = 0; // 表长置为 0。
//memset(LL.data, 0, sizeof(ElemType) * MAXSIZE); // 清空数组。
memset(&LL, 0, sizeof(SeqList)); // 清空结构体。
}
// 在顺序表 LL 的第 pos 个位置插入元素 ee,返回值:true-成功;false-失败。
// 注意:在数据结构中,位置 pos 从 1 开始,不是从 0 开始。
// 6 8 2 1 12 4 5 3 7 // 顺序表中的元素。
// 1 2 3 4 5 6 7 8 9 10 // 位置。
// 0 1 2 3 4 5 6 7 8 9 // 数组下标。
bool InsertList(SeqList& LL, const size_t pos, const ElemType& ee)
{
if (LL.length == MAXSIZE) { cout << "顺序表已满,不能插入。\n"; return false; }
// 判断位置 pos 是否合法。
if ((pos < 1) || (pos > LL.length + 1)) {
cout << "插入位置" << pos << "不合法,应该在 1-" << LL.length + 1 << "之间。\n";
return false;
}
// 把 pos 和 pos 之后的元素后移。
if (pos < LL.length + 1)
memmove(LL.data + pos, LL.data + pos - 1, (LL.length - pos + 1) * sizeof(ElemType));
// 把元素 ee 的值赋值给顺序表的第 pos 个元素。
//memcpy(&LL.data[pos - 1], &ee, sizeof(ElemType)); // 采用 memcpy 是为了兼容 ee 为
结构体的情况。
LL.data[pos - 1] = ee; // 在 C++中,结构体也可以用=赋值。
LL.length++; // 表长加 1。
return true;
}
// 求顺序表的表长,返回值表 LL 中元素的个数。
size_t LengthList(const SeqList& LL)
{
return LL.length;
}
// 获取顺序表中第 pos 个元素的值,存放在 ee 中,返回值:false-失败;true-成功。
bool GetElem(const SeqList LL, const size_t pos, ElemType& ee)
{
// 判断位置 pos 是否合法。
if ((pos < 1) || (pos > LL.length)) return false;
ee = LL.data[pos - 1];
return true;
}
// 在顺序表 LL 的头部插入元素 ee。
bool PushFront(SeqList& LL, const ElemType& ee)
{
return InsertList(LL, 1, ee);
}
// 在顺序表 LL 的尾部插入元素 ee。
bool PushBack(SeqList& LL, const ElemType& ee)
{
return InsertList(LL, LL.length + 1, ee);
}
// 查找 ee 在顺序表 LL 中的位置,返回值:0-元素 ee 在表 LL 中不存在,>0 元素 ee 在表 LL 中的
位置。
size_t FindElem(const SeqList& LL, const ElemType& ee)
{
for (size_t ii = 0; ii < LL.length; ii++)
{
// 如果元素 ee 为结构体,以下代码要修改(比较数据元素的关键字)。
if (LL.data[ii].bh == ee.bh) return ii + 1;
}
return 0;
}
// 删除顺序表 LL 中的第 pos 个元素,返回值:0-位置 pos 不合法;1-成功。
bool DeleteElem(SeqList& LL, const size_t pos)
{
// 判断位置 pos 是否合法,注意,pos 从 1 开始,不是从 0 开始,0 不符合人类的习惯。
if ((pos < 1) || (pos > LL.length)) {
cout << "删除位置" << pos << "不合法,应该在 1-" << LL.length << "之间。\n";
return false;
}
// 把 pos 之后的元素前移。
memmove(&LL.data[pos - 1], &LL.data[pos], sizeof(ElemType) * (LL.length - pos));
LL.length--; // 表长减 1。
return true;
}
// 删除顺序表 LL 中头元素。
bool PopFront(SeqList& LL)
{
return DeleteElem(LL, 1);
}
// 删除顺序表 LL 中尾元素。
bool PopBack(SeqList& LL)
{
return DeleteElem(LL, LL.length);
}
// 判断顺序表是否为空,返回值:true-空,false-非空。
bool IsEmpty(const SeqList& LL)
{
if (LL.length == 0) return true;
return false;
}
// 显示顺序表中全部的元素。
void PrintList(const SeqList& LL)
{
if (LL.length == 0) { cout << "表为空。\n"; return; }
for (size_t ii = 0; ii < LL.length; ii++)
{
cout << LL.data[ii].bh << " ";
}
cout << endl;
}
int main()
{
SeqList LL; // 创建顺序表。
ClearList(LL); // 清空顺序表。
ElemType ee; // 创建一个数据元素。
// 注意,在以下测试代码中,我没有管超女结构体的 name 字段。
cout << "在表中插入元素(1、2、3、4、5、6、7、8、9、10)。\n";
ee.bh = 1; InsertList(LL, 1, ee);
ee.bh = 2; InsertList(LL, 1, ee);
ee.bh = 3; InsertList(LL, 1, ee);
ee.bh = 4; InsertList(LL, 1, ee);
ee.bh = 5; InsertList(LL, 1, ee);
ee.bh = 6; InsertList(LL, 1, ee);
ee.bh = 7; InsertList(LL, 1, ee);
ee.bh = 8; InsertList(LL, 1, ee);
ee.bh = 9; InsertList(LL, 1, ee);
ee.bh = 10; InsertList(LL, 1, ee);
PrintList(LL);
cout << "在表头插入元素(11),表尾插入元素(12)。\n";
ee.bh = 11; PushFront(LL, ee);
ee.bh = 12; PushBack(LL, ee);
PrintList(LL);
cout << "在第 5 个位置插入元素(13)。\n";
ee.bh = 13; InsertList(LL, 5, ee);
PrintList(LL);
cout << "删除表中第 7 个元素。\n";
DeleteElem(LL, 7); PrintList(LL);
cout << "删除表头元素。\n";
PopFront(LL); PrintList(LL);
cout << "删除表尾元素。\n";
PopBack(LL); PrintList(LL);
GetElem(LL, 5, ee);
cout << "第 5 个元素的值是" << ee.bh << "。\n";
ee.bh = 8;
cout << "元素值为 8 的位置是=" << FindElem(LL, ee) << endl;
}
 

相关文章:

C++学习笔记(30)

二十三、随机数 在实际开发中&#xff0c;经常用到随机数&#xff0c;例如&#xff1a;纸牌的游戏洗牌和发牌、生成测试数据等。 函数原型&#xff1a; void srand(unsigned int seed); // 初始化随机数生成器&#xff08;播种子&#xff09;。 int rand(); // 获一个取随机数。…...

Rust GUI框架 tauri V2 项目创建

文章目录 Tauri 2.0创建应用文档移动应用开发 Android 前置要求移动应用开发 iOS 前置要求参考资料 Tauri 2.0 Tauri 是一个构建适用于所有主流桌面和移动平台的轻快二进制文件的框架。开发者们可以集成任何用于创建用户界面的可以被编译成 HTML、JavaScript 和 CSS 的前端框架…...

C++继承(上)

1.继承的概念 继承是一个类继承另外一个类&#xff0c;称继承的类为子类/派生类&#xff0c;被继承的类称为父类/基类。 比如下面两个类&#xff0c;Student和Person&#xff0c;Student称为子类&#xff0c;Person称为父类。 #include<iostream> using namespace std…...

在 Vim 中打开文件并快速查询某个字符

在 Vim 中打开文件并快速查询某个字符&#xff0c;可以按照以下步骤操作&#xff1a; 打开 Vim 并加载文件&#xff1a; vim your_file.txt将 your_file.txt 替换为你要查询的文件名。 进入普通模式&#xff08;如果你还在插入模式或其他模式下&#xff09;&#xff1a; Es…...

oracle 条件取反

在Oracle数据库中&#xff0c;条件取反主要通过逻辑运算符NOT来实现。NOT是一个单目运算符&#xff0c;用于对指定的条件表达式取反。当条件表达式为真&#xff08;True&#xff09;时&#xff0c;NOT运算符的结果就是假&#xff08;False&#xff09;&#xff1b;反之&#xf…...

力扣最热一百题——缺失的第一个正数

目录 题目链接&#xff1a;41. 缺失的第一个正数 - 力扣&#xff08;LeetCode&#xff09; 题目描述 示例 提示&#xff1a; 解法一&#xff1a;标记数组法 1. 将非正数和超出范围的数替换 2. 使用数组下标标记存在的数字 3. 找到第一个未标记的位置 4. 为什么时间复杂…...

零基础入门AI:一键本地运行各种开源大语言模型 - Ollama

什么是 Ollama&#xff1f; Ollama 是一个可以在本地部署和管理开源大语言模型的框架&#xff0c;由于它极大的简化了开源大语言模型的安装和配置细节&#xff0c;一经推出就广受好评&#xff0c;目前已在github上获得了46k star。 不管是著名的羊驼系列&#xff0c;还是最新…...

3.接口测试的基础/接口关联(Jmeter工具/场景一:我一个人负责所有的接口,项目规模不大)

一、Jmeter接口测试实战 1.场景一&#xff1a;我一个人负责所有的接口&#xff1a;项目规模不大 http:80 https:443 接口文档一般是开发给的&#xff0c;如果没有那就需要抓包。 请求默认值&#xff1a; 2.请求&#xff1a; 请求方式:get,post 请求路径 请求参数 查询字符串参数…...

【matlab】将程序打包为exe文件(matlab r2023a为例)

文章目录 一、安装运行时环境1.1 安装1.2 简介 二、打包三、打包文件为什么很大 一、安装运行时环境 使用 Application Compiler 来将程序打包为exe&#xff0c;相当于你使用C编译器把C语言编译成可执行程序。 在matlab菜单栏–App下面可以看到Application Compiler。 或者在…...

从底层原理上解释clickhouse查询为什么快

ClickHouse 是一个开源的列式数据库管理系统&#xff0c;以其极高的查询性能著称。为了理解 ClickHouse 查询为什么快&#xff0c;我们需要从以下几个方面进行深入探讨&#xff0c;包括其架构设计、存储引擎、索引结构、并行化策略以及内存管理等底层原理。 1. 列式存储&#…...

FEAD:fNIRS-EEG情感数据库(视频刺激)

摘要 本文提出了一种可用于训练情绪识别模型的fNIRS-EEG情感数据库——FEAD。研究共记录了37名被试的脑电活动和脑血流动力学反应&#xff0c;以及被试对24种情绪视听刺激的分类和维度评分。探讨了神经生理信号与主观评分之间的关系&#xff0c;并在前额叶皮层区域发现了显著的…...

标准库标头 <bit>(C++20)学习

<bit>头文件是数值库的一部分。定义用于访问、操作和处理各个位和位序列的函数。例如&#xff0c;有函数可以旋转位、查找连续集或已清除位的数量、查看某个数是否为 2 的整数幂、查找表示数字的最小位数等。 类型 endian (C20) 指示标量类型的端序 (枚举) 函数 bit_ca…...

redis群集三种模式:主从复制、哨兵、集群

redis群集有三种模式 redis群集有三种模式&#xff0c;分别是主从同步/复制、哨兵模式、Cluster&#xff0c;下面会讲解一下三种模式的工作方式&#xff0c;以及如何搭建cluster群集 ●主从复制&#xff1a;主从复制是高可用Redis的基础&#xff0c;哨兵和集群都是在主从复制…...

【MATLAB源码-第225期】基于matlab的计算器GUI设计仿真,能够实现基础运算,三角函数以及幂运算

操作环境&#xff1a; MATLAB 2022a 1、算法描述 界面布局 计算器界面的主要元素分为几大部分&#xff1a;显示屏、功能按钮、数字按钮和操作符按钮。 显示屏 显示屏&#xff08;Edit Text&#xff09;&#xff1a;位于界面顶部中央&#xff0c;用于显示用户输入的表达式和…...

基于yolov8的红外小目标无人机飞鸟检测系统python源码+onnx模型+评估指标曲线+精美GUI界面

【算法介绍】 基于YOLOv8的红外小目标无人机与飞鸟检测系统是一项集成了前沿技术的创新解决方案。该系统利用YOLOv8深度学习模型的强大目标检测能力&#xff0c;结合红外成像技术&#xff0c;实现了对小型无人机和飞鸟等低空飞行目标的快速、准确检测。 YOLOv8作为YOLO系列的…...

网络封装分用

目录 1,交换机 2,IP 3,接口号 4,协议 分层协议的好处: 5,OSI七层网络模型. 6,TCP/IP五层网络模型(主流): [站在发送方视角] [接收方视角] 1,交换机 交换机和IP没有关系,相当于是对路由器接口的扩充,这时相当于主机都与路由器相连处于局域网中,把越来越多的路由器连接起…...

【Finetune】(一)、transformers之BitFit微调

文章目录 0、参数微调简介1、常见的微调方法2、代码实战2.1、导包2.2、加载数据集2.3、数据集处理2.4、创建模型2.5、BitFit微调*2.6、配置模型参数2.7、创建训练器2.8、模型训练2.9、模型推理 0、参数微调简介 参数微调方法是仅对模型的一小部分的参数&#xff08;这一小部分可…...

ubuntu24系统普通用户免密切换到root用户

普通用户登录系统后需要切换到root用户&#xff0c;这边需要密码&#xff0c;现在不想让用户知道密码是多少。 sudo: 1 incorrect password attempt $ su - Password: root-security-cm5:~#开始配置普通用户免密切换到root用户&#xff0c;编辑配置文件 /etc/sudoers 最后增加…...

如何应对pcdn技术中遇到的网络安全问题?

在应对网络安全问题时&#xff0c;需要采取一系列的操作措施&#xff0c;以确保网络环境的稳定性和数据的安全性。以下是一些建议&#xff1a; 选择可靠的PCDN提供商&#xff1a;与有良好安全记录的PCDN提供商合作&#xff0c;确保提供商具备专业的安全团队&#xff0c;能够提…...

【WRF工具】WRF Domain Wizard第一期:软件下载及安装

【WRF工具介绍】WRF Domain Wizard下载及安装 1 WRF Domain Wizard 的主要功能2 使用 WRF Domain Wizard 的步骤2.1 安装 WRF Domain Wizard&#xff1a;2.2 启动 WRF Domain Wizard&#xff1a;2.3 定义计算域&#xff1a;2.4 生成配置文件&#xff1a;2.5 运行 WPS 和 WRF&am…...

使用CUBE_MX实现STM32 DMA功能 (储存器发送数据到外设串口)+(外设串口将数据写入到存储器)

目录 一、配置串口打印&#xff08;参考串口打印的文章&#xff09; 二、CUBE_MX配置 三、KEIL5配置 1.打开dma.c文件&#xff08;默认初始化DMA中断函数&#xff09; 2.打开usart.c文件 3.打开main.c文件&#xff08;储存器发送数据到外设串口&#xff09; 4.打开main.c…...

【JavaScript】数据结构之树

什么是树形结构&#xff1f; 一种分层数据的抽象模型&#xff0c;用来分层级关系的。虚拟dom它所组织的那个数据原理就是树形结构 深度优先搜索&#xff08;遍历&#xff09;- 递归 从根出发&#xff0c;尽可能深的搜索树的节点技巧 访问根节点对根节点的children挨个进行深…...

【AI大模型】LLM主流开源大模型介绍

目录 &#x1f354; LLM主流大模型类别 &#x1f354; ChatGLM-6B模型 2.1 训练目标 2.2 模型结构 2.3 模型配置(6B) 2.4 硬件要求 2.5 模型特点 2.6 衍生应用 &#x1f354; LLaMA模型 3.1 训练目标 3.2 模型结构 3.3 模型配置&#xff08;7B&#xff09; 3.4 硬件…...

Uniapp的alertDialog返回值+async/await处理确定/取消问题

今天在使用uniui的alertDialog时&#xff0c;想添加一个确定/取消的警告框时 发现alertDialog和下面的处理同步进行了&#xff0c;没有等待alaertDialog处理完才进行 查询后发现问题在于 await 关键字虽然被用来等待 alertDialog.value.open() 的完成&#xff0c;但是 alertDi…...

Spring Boot中的响应与分层解耦架构

Spring Boot中的响应与分层解耦架构 在Spring Boot框架中&#xff0c;响应与分层解耦架构是两个核心概念&#xff0c;它们共同促进了应用程序的高效性、可维护性和可扩展性。下面将详细探讨这两个方面&#xff0c;包括Spring Boot的响应机制、分层解耦的三层架构以及它们在实际…...

基于python+django+vue的图书管理系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、SSM项目源码 系统展示 【2025最新】基于pythondjangovueMySQL的图…...

Oracle数据库安装与SQL*Plus使用

一、实验过程 1、安装完数据库服务器程序后&#xff0c;查看系统服务启动状况并截图。 2、启动 SOL Plus工具,分别以SYS用户和 SYSTEM用户登录数据库&#xff0c;并解锁scott用户&#xff0c;用scott用户登录。每次登录完成后用show user命令查看当前用户&#xff0c;并截图。…...

C#通过MXComponent与三菱PLC通信

1&#xff0c;MXComponent安装包与手册。 https://download.csdn.net/download/lingxiao16888/89767137 2&#xff0c;使用管理员权限打开MXComponent&#xff0c;并进行配置。 3&#xff0c;引用相应的类库。 //通信类库 ActUtlTypeLib.dll或者ActProgType.dll 注明&#x…...

深度学习实战91-利用时空特征融合模型的城市网络流量预测分析与应用

大家好,我是微学AI,今天给大家介绍一下深度学习实战91-利用时空特征融合模型的城市网络流量预测分析与应用。本文围绕基于时空特征融合的城市网络流量预测展开。介绍了城市网络流量预测的重要性和现实需求,以及时空特征融合模型,包括其原理和优势。然后展示所使用的数据集,…...

GlusterFS 分布式文件系统

一、GlusterFS 概述 1.1 什么是GlusterFS GlusterFS 是一个开源的分布式文件系统&#xff0c;它可以将多个存储服务器结合在一起&#xff0c;创建一个大的存储池&#xff0c;供客户端使用。它不需要单独的元数据服务器&#xff0c;这样可以提高系统的性能和可靠性。由于没有…...