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

C++蓝桥杯实训篇(二)

片头

嗨咯~小伙伴们!今天我们来一起学习算法和贪心思维,准备好了吗?咱们开始咯!


第1题  数位排序

对于这道题,我们需要自己写一个排序算法,也就是自定义排序,按照数位从小到大进行排序。

举一个例子呗:假设我们从1~13,对这13个数字进行数位排序

数字数位和
11
22
33
44
55
66
77
88
99
101
112
123
134

从上述表格中,我们可以看出:

①1~13这13个数字,最大的数位和为9。

②1和10的数位和相同,均为1;2和11的数位和相同,均为2;3和12的数位和相同,均为3;4和13的数位和相同,均为4。

③由此可以得出,1~13的排序为:1,10,2,11,3,12,4,13,5,6,7,8,9。第5个数为3。

理解了题意,有什么思路呢?

我们可以先定义num数组,将1~n每个数字对应的数位和存储起来

    int num[10000086];int n;cin >> n;for (int i = 1; i <= n; i++) {int temp = i;while (temp > 0) {int ge = temp % 10;num[i] += ge;			//num数组存储1~n个数的数位和temp = temp / 10;}}

把这n个数字的数位和存储起来后,我们需求出当前这n个数字中最大的数位和。

	//遍历num数组,求出最大的数位和int maxnum = 0;for (int i = 1; i <= n; i++) {maxnum = max(maxnum, num[i]);}

接下来就是重头戏啦:按照数位和从小到大进行排序

外层循环从1~maxnum,表示数位和的取值范围;内层循环从1~n,表示共有n个数参加数位排序

	//按照数位和从小到大进行排序int cnt = 1;//计数器,标记当前数在哪个位置for (int j = 1; j <= maxnum; j++) {for (int i = 1; i <= n; i++) {if (num[i] == j) {res[cnt++] = i;}}}

按照数字和从小到大排序数字:

1. cnt = 1: 计数器,表示res数组中下一个要填充的位置

2. 外层循环 j 从 1 到 maxnum (所有可能的数字和);内层循环 i 从 1 到 n (所有数字)

3. 如果数字 i 的数字和等于当前 j ,就把 i 放入 res 数组

这样得到的res数组就是按数字和排序的结果,数字和相同的保持原始顺序

 最后输出排序后第m个数字即可。

	//输出第m个元素cout << res[m] << endl;

okk,整体代码如下:

#include<iostream>
using namespace std;//数位排序int n;
int m;int num[10000086];
int res[10000086];int main() {cin >> n >> m;for (int i = 1; i <= n; i++) {int temp = i;while (temp > 0) {int ge = temp % 10;num[i] += ge;			//num数组存储1~n个数的数位和temp = temp / 10;}}//遍历num数组,求出最大的数位和int maxnum = 0;for (int i = 1; i <= n; i++) {maxnum = max(maxnum, num[i]);}//按照数位和从小到大进行排序int cnt = 1;//计数器,标记当前数在哪个位置for (int i = 1; i <= maxnum; i++) {for (int j = 1; j <= n; j++) {if (num[j] == i) {res[cnt++] = j;}}}//输出第m个元素cout << res[m] << endl;return 0;
}

如果对以上代码有疑问的话,不妨看看下面这段文字描述: 

 第2题  封闭图形的个数

对于这道题,咱们可以先定义num数组,把数字0~9的封闭图形的个数存起来。

	int cnt[10]; //全局数组,用于存储每个数字的"圆圈"数量//定义从0~9每个数字中圆圈的个数cnt[0] = 1, cnt[1] = 0, cnt[2] = 0, cnt[3] = 0, cnt[4] = 1;cnt[5] = 0, cnt[6] = 1, cnt[7] = 0, cnt[8] = 2, cnt[9] = 1;

 输入n个数

    const int N = 2e5 + 10;  //定义常量N为200000,作为数组大小int a[N];int n;cin >> n;for (int i = 1; i <= n; i++) {cin >> a[i];}

接下来是重点:如何将数字按照封闭图形的个数进行排序~

和上一道题类似,只不过是根据当前最后1位数字获取该数字在num数组中的映射。

bool cmp(int a,int b) {int A = a, B = b;			//复制a和b的值,避免修改原值int cnt_a = 0, cnt_b = 0;	//初始化两个数字的圆圈总数//循环计算数字a和b中每个数字位的圆圈数量总和while (A > 0) {int ge = A % 10;		//获取数字的个位数cnt_a += cnt[ge];		//cnt[ge]: 获取该数字的圆圈数量A = A / 10;				//去掉已经处理的个位数}while (B > 0) {int r = B % 10;cnt_b += cnt[r];B = B / 10;}//如果两个数字的圆圈总数相同,按数字本身的大小升序排序//如果圆圈数量不同,按圆圈数量升序排序if (cnt_a == cnt_b) return a < b;     // 圆圈个数相等时比较数值else return cnt_a < cnt_b;			  // 圆圈个数不等时比较圆圈数量
}

欧克,我们写好自定义的排序后,接着就可以利用sort函数进行排序啦~

	/*使用STL的sort函数进行排序a+1:从数组的第1个元素开始a+n+1:到数组的第n个元素结束cmp	:使用自定义的比较函数进行排序*/sort(a + 1, a + n + 1, cmp);for (int i = 1; i <= n; i++) {cout << a[i] << " ";}

okk,本道题完整代码如下:

#include <bits/stdc++.h>
using namespace std;const int N = 2e5 + 10;         //定义常量N为200000,作为数组大小
int cnt[10];                    //全局数组,用于存储每个数字的"圆圈"数量
int a[N];                       //存储输入的数字数组bool cmp(int a,int b) {int A = a, B = b;			//复制a和b的值,避免修改原值int cnt_a = 0, cnt_b = 0;	//初始化两个数字的圆圈总数//循环计算数字a和b中每个数字位的圆圈数量总和while (A > 0) {int ge = A % 10;		//获取数字的个位数cnt_a += cnt[ge];		//cnt[ge]: 获取该数字的圆圈数量A = A / 10;				//去掉已经处理的个位数}while (B > 0) {int r = B % 10;cnt_b += cnt[r];B = B / 10;}//如果两个数字的圆圈总数相同,按数字本身的大小升序排序//如果圆圈数量不同,按圆圈数量升序排序if (cnt_a == cnt_b) return a < b;     // 圆圈个数相等时比较数值else return cnt_a < cnt_b;			  // 圆圈个数不等时比较圆圈数量
}int main() {//定义从0~9每个数字中圆圈的个数cnt[0] = 1, cnt[1] = 0, cnt[2] = 0, cnt[3] = 0, cnt[4] = 1;cnt[5] = 0, cnt[6] = 1, cnt[7] = 0, cnt[8] = 2, cnt[9] = 1;int n;cin >> n;for (int i = 1; i <= n; i++) {cin >> a[i];}/*使用STL的sort函数进行排序a+1:从数组的第1个元素开始a+n+1:到数组的第n个元素结束cmp	:使用自定义的比较函数进行排序*/sort(a + 1, a + n + 1, cmp);for (int i = 1; i <= n; i++) {cout << a[i] << " ";}return 0;
}

 如果看不懂以上代码,不如看看下面这段描述:

小贴士:


第3题  三国游戏

分析题意:

  • 三个国家初始得分均为0

  • 每个事件会给三个国家带来不同的得分

  • 一个国家获胜的条件是该国得分 > 其他两国得分之和

  • 目标是找出能让某个国家获胜的最多事件数

对于这道题,我们可以先输入n个事件分别对魏国,蜀国,吴国的得分

    typedef long long ll;	  // 使用long long防止整数溢出const int N = 1e5 + 100;  // 最大事件数int A[N], B[N], C[N];	  // 存储三个国家每个事件的得分cin >> n;//输入原始数据//A、B、C分别存储魏蜀吴3个国家发生对应事件增加的得分for (int i = 1; i <= n; i++) cin >> A[i];  //魏国for (int i = 1; i <= n; i++) cin >> B[i];  //蜀国for (int i = 1; i <= n; i++) cin >> C[i];  //吴国

接下来就该我们来实现当其中1个国家获胜时,最多发生了多少个事件?

首先,我们定义weight[N]数组,用来存储每个事件对某个国家的“纯贡献"

int weight[N];  // 存储每个事件对某个国家的"纯贡献"

我们需要格外注意的是:计算下一个国家的纯贡献值时,必须把当前的weight数组里面的值清空

memset(weight,0,sizeof(weight));  	//将weight数组里面的原始数据清空

对于n个事件,每个事件对某个国家的"纯贡献" = 事件对该国家的得分与其他国家得分之差。

举个例子呗~  假设发生事件 i ,X得4分,Y得2分,Z得1分,可知 4-2-1>0,X获胜

	//计算每个事件对a的纯贡献for (int i = 1; i <= n; i++) {//假设a[i]=7,b[i]=2,c[i]=2,则发生i事件对a的纯贡献是7-2-2=3//可以理解为该发生事件使a比b+c的得分高了3weight[i] = a[i] - b[i] - c[i];}

我们再将每个事件对a的纯贡献,进行从大到小的排序

    bool cmp(int a, int b)	//从大到小进行排序{return a > b;}//将纯贡献按从大到小进行排序sort(weight + 1, weight + n + 1, cmp);

定义变量sum,初始值为0,用来表示累加当前的总贡献。定义变量ans,初始值为0,用来记录可以发生多少事件使a>b+c。

依次循环遍历n个事件对a的纯贡献,用sum累加每个事件对a的纯贡献,如果每次累加的结果使sum>0,那么ans++,直到sum<0,跳出循环。最后返回结果。

	ll sum = 0;     //累加当前的总贡献  int ans = 0;    //记录可以发生多少事件使a>b+cfor (int i = 1; i <= n; i++) {sum += weight[i];		//累加贡献if (sum > 0) ans++;		//累计贡献严格大于0,计数+1else break;				//若不大于0,由于序列递减//后面只会越来越小,直接退出}return ans;					//将事件数返回

此外,我们必须考虑特殊情况:当ans==0时,直接返回-1

	if (ans == 0) return -1;	//1个事件都不能发生,返回-1

okk,关于自定义排序的完整代码如下:

typedef long long ll;	  // 使用long long防止整数溢出const int N = 1e5 + 100;  // 最大事件数
int A[N], B[N], C[N];	  // 存储三个国家每个事件的得分
int weight[N];			  // 存储每个事件对某个国家的"纯贡献"int n;bool cmp(int a, int b)	//从大到小进行排序
{return a > b;
}int solve(int a[], int b[], int c[]) //a获胜,发生最多的事件数
{ll sum = 0; //累加当前的总贡献//将weight数组里面的原始数据清空memset(weight, 0, sizeof(weight));//计算每个事件对a的纯贡献for (int i = 1; i <= n; i++) {//假设a[i]=7,b[i]=2,c[i]=2,则发生i事件对a的纯贡献是7-2-2=3//可以理解为该发生事件使a比b+c的得分高了3weight[i] = a[i] - b[i] - c[i];}//将纯贡献按从大到小进行排序sort(weight + 1, weight + n + 1, cmp);//记录可以发生多少事件使a>b+cint ans = 0;for (int i = 1; i <= n; i++) {sum += weight[i];		//累加贡献if (sum > 0) ans++;		//累计贡献严格大于0,计数+1else break;				//若不大于0,由于序列递减//后面只会越来越小,直接退出}if (ans == 0) return -1;	//1个事件都不能发生,返回-1return ans;					//将事件数返回
}

我们在main函数中调用solve函数,计算魏国,蜀国,吴国能获胜的最多事件数。

魏国获胜的条件是:魏国得分 > 蜀国+吴国得分  -->   a > b + c  -->  a - b - c > 0

蜀国获胜的条件是:蜀国得分 > 魏国+吴国得分  -->   b > a + c  -->  b - a - c > 0

吴国获胜的条件是:吴国得分 > 魏国+蜀国得分  -->   c > a + b  -->  c - a - b > 0

	int ret1 = solve(A, B, C);    //假设魏国获胜,发生最多的事件数int ret2 = solve(B, A, C);    //假设蜀国获胜,发生最多的事件数int ret3 = solve(C, A, B);    //假设吴国获胜,发生最多的事件数

 最后求出最大值即可。

	int MAX = max(ret1, max(ret2, ret3));    //三者取最大值即可cout << MAX << endl;				     //将最终结果输出

okk,这道题的整体代码如下:

//三国游戏
//对于X、Y、Z三个国家,X获胜的条件为 X>Y+Z
//初始时,三者得分均为0
//故X能否获胜完全取决于每个事件对应的得分与其他国家得分之差
//假设发生事件i,X得4分,Y得2分,Z得1分,可知 4-2-1>0,X获胜
//若要求某个国家获胜所发生的最多事件,只需处理每个事件对该国家的纯贡献即可
//所谓纯贡献就是该事件对该国家的得分与其他国家得分之差,只要大于0即说明可获性
//计算每个事件对该国家的纯贡献并从大到小排序,依次累加贡献
//只要总的贡献仍然大于0,就说明当前事件是可以发生的,计数值+1
//依次枚举3个国家,比较出可发生的事件数的最大值即为答案#include <bits/stdc++.h>
using namespace std;typedef long long ll;	  // 使用long long防止整数溢出const int N = 1e5 + 100;  // 最大事件数
int A[N], B[N], C[N];	  // 存储三个国家每个事件的得分
int weight[N];			  // 存储每个事件对某个国家的"纯贡献"int n;bool cmp(int a, int b)	//从大到小进行排序
{return a > b;
}int solve(int a[], int b[], int c[])      //a获胜,发生最多的事件数
{ll sum = 0;                           //初始化累计纯贡献总和(用long long防溢出)memset(weight, 0, sizeof(weight));    //将weight数组里面的原始数据清空//计算每个事件对a的纯贡献for (int i = 1; i <= n; i++) {//假设a[i]=7,b[i]=2,c[i]=2,则发生i事件对a的纯贡献是7-2-2=3//可以理解为该发生事件使a比b+c的得分高了3weight[i] = a[i] - b[i] - c[i];}//将纯贡献按从大到小进行排序sort(weight + 1, weight + n + 1, cmp);//记录可以发生多少事件使a>b+cint ans = 0;for (int i = 1; i <= n; i++) {sum += weight[i];		// 累加当前事件的纯贡献if (sum > 0) ans++;		// 如果累加后总贡献仍为正,则这个事件可以被选择,计数器+1else break;				// 如果总贡献≤0,立即终止循环//(后续事件纯贡献更小,只会让总和更小)}if (ans == 0) return -1;	//1个事件都不能发生,返回-1return ans;					//将事件数返回
}int main() {cin >> n;//输入原始数据//A、B、C分别存储魏蜀吴3个国家发生对应事件增加的得分for (int i = 1; i <= n; i++) cin >> A[i];  //魏国for (int i = 1; i <= n; i++) cin >> B[i];  //蜀国for (int i = 1; i <= n; i++) cin >> C[i];  //吴国int ret1 = solve(A, B, C);    //假设魏国获胜,发生最多的事件数int ret2 = solve(B, A, C);    //假设蜀国获胜,发生最多的事件数int ret3 = solve(C, A, B);    //假设吴国获胜,发生最多的事件数int MAX = max(ret1, max(ret2, ret3));    //三者取最大值即可cout << MAX << endl;				     //将最终结果输出return 0;
}

如果对上述代码有疑问,不妨看看下面的解释~ 


 第4题  错误票据

 这道题,需要我们找出重复和缺失的数。因为题目明确告诉我们:读取N行数据,每行数据长度不等。因此,我们可以使用vector容器来动态存储元素。

	vector<int> v;	//动态数组int n;			//输入n行cin >> n;

 我们可以使用for循环来读取这n行数据,将元素尾插到vector容器中。如果遇到'\n',那么立即停止对这一行的读取。

	for (int i = 1; i <= n; i++)		    //总共输入n行{int x;while (cin >> x)					//读取每行中的每个数字,遇到Ctrl+Z才结束{v.push_back(x);					//将数字添加到动态数组v中if (cin.get() == '\n') break;	//遇到'\n',停止对这一行进行读取}}

接下来我们对vector容器中的元素按照从小到大的顺序排序:

	sort(v.begin(), v.end()); //将所有元素从小到大依次排序

排好序后,我们开始寻找重复和缺失的数字。

重复:2个元素相等

缺失:前一个数字+1不等于后一个数字,也就是非连续的。说明这个数字缺失

	int a = 0;	//用于存储重复的数字int b = 0;	//用于存储缺失的数字for (int i = 0; i < v.size() - 1 ; i++)			// 遍历排序后的数组{if (v[i] == v[i + 1])	  a = v[i];		    // 如果发现相邻数字相同,记录重复数字if (v[i + 1] == v[i] + 2) b = v[i] + 1;		// 如果发现数字间隔为2,记录中间缺失的数字}cout << b << " " << a << endl;					// 输出缺失数字和重复数字

欧克啦,本道题完整代码如下:

#include <bits/stdc++.h>
using namespace std;int main() {vector<int> v;	//动态数组int n;			//输入n行cin >> n;for (int i = 1; i <= n; i++)		//总共输入n行{int x;while (cin >> x)					//读取每行中的每个数字,遇到Ctrl+Z才结束{v.push_back(x);					//将数字添加到动态数组v中if (cin.get() == '\n') break;	//遇到'\n',停止对这一行进行读取}}sort(v.begin(), v.end()); //将所有元素从小到大依次排序int a = 0;	//用于存储重复的数字int b = 0;	//用于存储缺失的数字for (int i = 0; i < v.size() - 1 ; i++)			//遍历排序后的数组{if (v[i] == v[i + 1])	  a = v[i];		    //如果发现相邻数字相同,记录重复数字if (v[i + 1] == v[i] + 2) b = v[i] + 1;		//如果发现数字间隔为2,记录中间缺失的数字}cout << b << " " << a << endl;					//输出缺失数字和重复数字return 0;
}

第5题  排个序

这道题,其实是冒泡排序的限制版本。冒泡排序可以任意2个数进行交换,但是这道题有限制条件。

代码如下:

//排个序int a[1010], p[1010], o[1010];//a: 存储待排序数组
//p: 存储允许交换的位置
//o: 一维数组,标记哪些位置允许交换int main() {int n, m;cin >> n >> m;		//输入数组长度n和允许交换的数量m//输入待排序数组for (int i = 1; i <= n; i++) {cin >> a[i];}//输入并标记允许交换的位置for (int i = 1; i <= m; i++) {cin >> p[i];o[p[i]] = 1;	//标记这个位置允许与其下一个位置交换}//单次遍历的冒泡排序for (int i = 1; i < n; i++) // i<n 防止访问a[n+1]越界{if (a[i] > a[i + 1])	//如果需要交换{if (o[i] == 1)		//检查是否允许交换{swap(a[i], a[i + 1]);	//允许则交换}else {cout << "NO";			//不允许则直接失败return 0;}}}cout << "YES";	//所有必要条件都允许,排序成功return 0;
}

片尾

今天我们学习了自定义排序和贪心算法。希望看完这篇文章能对友友们有所帮助!!!

点赞收藏加关注!!!

谢谢大家!!!

相关文章:

C++蓝桥杯实训篇(二)

片头 嗨咯~小伙伴们&#xff01;今天我们来一起学习算法和贪心思维&#xff0c;准备好了吗&#xff1f;咱们开始咯&#xff01; 第1题 数位排序 对于这道题&#xff0c;我们需要自己写一个排序算法&#xff0c;也就是自定义排序&#xff0c;按照数位从小到大进行排序。 举一…...

YY forget password

YY forget password 老早以前的语音工具&#xff0c;游戏团队协作工具...

Kafka 如何解决消息堆积问题?

Kafka 的消息堆积问题是实际生产中经常遇到的情况&#xff0c;尤其在高并发、大流量、消费者故障或处理速度慢的情况下&#xff0c;非常容易出现。 下面我从诊断 解决方案 实战技巧三步帮你梳理清楚&#xff1a; &#x1f50d; 一、先判断&#xff1a;是否真的“堆积”&…...

如何通过优化HMI设计大幅提升产品竞争力?

一、HMI设计的重要性与竞争力提升 HMI&#xff08;人机交互界面&#xff09;设计在现代产品开发中扮演着至关重要的角色。良好的HMI设计不仅能够提升用户体验&#xff0c;还能显著增强产品的竞争力。在功能趋同的市场环境中&#xff0c;用户体验成为产品竞争的关键。HMI设计通…...

2025大唐杯仿真4——信令流程

Preamble请求...

MyBatis Plus 在 ZKmall开源商城持久层的优化实践

ZKmall开源商城作为基于 Spring Cloud 的高性能电商平台&#xff0c;其持久层通过 MyBatis Plus 实现了多项深度优化&#xff0c;涵盖分库分表、缓存策略、分页性能、多租户隔离等核心场景。以下是具体实践总结&#xff1a; 一、分库分表与插件集成优化 1. 分库分表策略 ​Sh…...

Qt多线程从基础到性能优化

一、为什么需要多线程开发 现代应用程序的性能需求 CPU多核架构的有效利用 复杂任务的解耦与响应式界面保持 二、Qt线程创建四大方式 1. 继承QThread重写run() class WorkerThread : public QThread {void run() override {// 耗时操作qDebug() << "Thread ID…...

Spring常见问题复习

############Spring############# Bean的生命周期是什么&#xff1f; BeanFactory和FactoryBean的区别&#xff1f; ApplicationContext和BeanFactory的区别&#xff1f; BeanFactoryAware注解&#xff0c;还有什么其它的Aware注解 BeanFactoryAware方法和Bean注解的方法执行顺…...

股票日数据使用_未复权日数据生成前复权日周月季年数据

目录 前置&#xff1a; 准备 代码&#xff1a;数据库交互部分 代码&#xff1a;生成前复权 日、周、月、季、年数据 前置&#xff1a; 1 未复权日数据获取&#xff0c;请查看 https://blog.csdn.net/m0_37967652/article/details/146435589 数据库使用PostgreSQL。更新日…...

【C++】从零实现Json-Rpc框架(2)

目录 JsonCpp库 1.1- Json数据格式 1.2 - JsonCpp介绍 • 序列化接口 • 反序列化接口 1.3 - Json序列化实践 JsonCpp使用 Muduo库 2.1 - Muduo库是什么 2.2 - Muduo库常见接口介绍 TcpServer类基础介绍 EventLoop类基础介绍 TcpConnection类基础介绍 TcpClient…...

JVM虚拟机篇(二):深入剖析Java与元空间(MetaSpace)

这里写目录标题 JVM虚拟机篇&#xff08;二&#xff09;&#xff1a;深入剖析Java与元空间&#xff08;MetaSpace&#xff09;一、引言二、全面认识Java2.1 Java的起源与发展历程2.2 Java的特性2.2.1 简单性2.2.2 面向对象2.2.3 平台无关性2.2.4 健壮性2.2.5 安全性2.2.6 多线程…...

NDK开发:音视频处理基础

音视频处理基础 一、音视频基础 1.1 音视频基本概念 视频编码格式 H.264/AVCH.265/HEVCVP8/VP9AV1音频编码格式 AACMP3PCMOPUS封装格式 MP4FLVMKVTS1.2 音视频处理流程 视频处理流程 采集(Camera/Screen)预处理(美颜/滤镜)编码(H.264/H.265)封装传输/存储音频处理流程 …...

【数字电路】第一章 数制和码制

一、数码的基本概念 1.数制 2.码制 二、几种常用的数制 三、不同数制间的转换 八进制和十六进制间通常不直接进行转换&#xff0c;而是先转换成二进制或十进制然后再进行转换。 1.任意进制→十进制&#xff08;N—十转换&#xff09; 2.十进制→任意进制&#xff08;十—N转换…...

软件工程面试题(二十九)

1、Internet的最顶级的商业域名叫什么? 答: .com 2、GC是什么,为什么要使用它? 垃圾回收 (garbage collection, GC) 一个跟踪过程,它传递性地跟踪指向当前使用的对象的所有指针,以便找到可以引用的所有对象,然后重新使用在此跟踪过程中未找到的任何堆内存。公共语言运行…...

6.第二阶段x64游戏实战-分析人物状态

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 本次游戏没法给 内容参考于&#xff1a;微尘网络安全 上一个内容&#xff1a;5.第二阶段x64游戏实战-动态模块地址 人物状态是与角色相关的&#xff0c;如果…...

Synopsys:设计对象

相关阅读 Synopsyshttps://blog.csdn.net/weixin_45791458/category_12812219.html?spm1001.2014.3001.5482 对于Synopsys的EDA工具&#xff08;如Design Compiler、PrimeTime、IC Compiler&#xff09;等&#xff0c;设计对象(Design Objects)是组成整个设计的抽象表示&…...

Redis数据结构之Hash

目录 1.概述2.常见操作2.1 H(M)SET/H(M)GET2.2 HGETALL2.3 HDEL2.4 HLEN2.5 HEXISTS2.6 HKEYS/HVALS2.7 HINCRBY2.8 HSETNX 3.总结 1.概述 Hash是一个String类型的field(字段)和value(值)的映射表&#xff0c;而且value是一个键值对集合&#xff0c;类似Map<String, Map<…...

【VUE】RuoYi-Vue3项目结构的分析

【VUE】RuoYi-Vue3项目结构的分析 1. 项目地址2. RuoYi-Vue3项目结构2.1 整体结构2.2 package.json2.2.1 &#x1f9fe; 基本信息2.2.2 &#x1f527; 脚本命令&#xff08;scripts&#xff09;2.2.3 &#x1f30d; 仓库信息2.2.4 &#x1f4e6; 项目依赖&#xff08;dependenc…...

libreoffice-help-common` 的版本(`24.8.5`)与官方源要求的版本(`24.2.7`)不一致

出现此错误的原因主要是软件包依赖冲突&#xff0c;具体分析如下&#xff1a; ### 主要原因 1. **软件源版本不匹配&#xff08;国内和官方服务器版本有差距&#xff09; 系统中可能启用了第三方软件源&#xff08;如 PPA 或 backports 源&#xff09;&#xff0c;导致 lib…...

5.数据手册解读——共模电感

目录 1 共模电感的工作原理 2 核心参数解读 2.1 电气参数 2.2 阻抗特性 共模电感(Common mode Choke)&#xff0c;也叫共模扼流圈&#xff0c;是在一个闭合磁环上对称绕制方向相反、匝数相同的线圈。理想的共模扼流圈对L&#xff08;或N&#xff09;与E之间的共模干扰具有抑…...

easy-poi 一对多导出

1. 需求&#xff1a; 某一列上下两行单元格A,B值一样且这两个单元格&#xff0c; 前面所有列对应单元格值一样的话&#xff0c; 就对A,B 两个单元格进行纵向合并单元格 1. 核心思路&#xff1a; 先对数据集的国家&#xff0c;省份&#xff0c;城市...... id 身份证进行排序…...

用C语言控制键盘上的方向键

各位同学&#xff0c;大家好&#xff01;相信大家在学习C语言的过程中&#xff0c;都和我一样&#xff0c;经常使用scanf函数来接受字符&#xff0c;数字&#xff0c;这些标准输入信息&#xff0c;来实现自己设计的程序效果。 而我突然有一天&#xff08;对就是今天&#xff09…...

第3课:状态管理与事件处理

第3课&#xff1a;状态管理与事件处理 学习目标 掌握useState Hook的使用理解组件事件处理机制实现表单输入与状态绑定完成任务添加功能原型 一、useState基础 1. 创建第一个状态 新建src/Counter.js&#xff1a; import { useState } from react;function Counter() {co…...

硬件工程师面试问题(五):蓝牙面试问题与详解

蓝牙技术作为物联网与智能设备的核心无线协议&#xff0c;其硬件设计能力直接影响产品连接稳定性、功耗及兼容性。面试是评估候选人射频电路设计、天线优化、协议栈调试等综合技能的关键环节&#xff0c;尤其在BLE低功耗设计、共存抗干扰等场景中&#xff0c;硬件工程师的实践经…...

leetcode4.寻找两个正序数组中的中位数

思路源于 LeetCode004-两个有序数组的中位数-最优算法代码讲解 基本思路是将两个数组看成一个数组&#xff0c;然后划分为两个部分&#xff0c;若为奇数左边部分个数多1&#xff0c;若为偶数左边部分等于右边部分个数。i表示数组1划分位置&#xff08;i为4是索引4也表示i的左半…...

20250405在荣品的PRO-RK3566开发板使用Rockchip原厂的buildroot系统来适配gmac1

【暂时还没有解决让PRO-RK3566的eth0/gmac1开机就启动】 PRO-RK3566作为iperf服务器&#xff1a; rootrk3566-buildroot:/# ifconfig rootrk3566-buildroot:/# ifconfig -a rootrk3566-buildroot:/# ifconfig eth0 up rootrk3566-buildroot:/# ifconfig rootrk3566-buildroot:/…...

7. 记忆(Memory)机制:让AI拥有“短期记忆”与“长期记忆”

引言&#xff1a;当AI学会"记住你" 2025年某银行智能客服因无法记住用户身份&#xff0c;每次对话都要求重复验证&#xff0c;引发大量投诉。引入LangChain 记忆系统后&#xff0c;客户满意度提升62%。本文将基于MemorySaver与FAISS本地存储&#xff0c;教你构建符合…...

Chapter07_图像压缩编码

文章目录 图像压缩编码图像压缩编码基础图像压缩的基本概念信息相关信息冗余信源编码及其分类 图像编码模型信源编码器模型信源解码器模型 数字图像的信息熵信源符号码字平均长度信息熵信息量 变长编码费诺码霍夫曼编码 位平面编码格雷码 图像压缩编码 数字图像的压缩是指在满…...

网络安全之前端学习(css终章)

如大家所见&#xff0c;今天的文章就是css的最后一篇文章。那么话不多说&#xff0c;我们开始吧。本章内容比较杂&#xff0c;就是补充之前几章没讲到的。 关系选择器 之前我们讲到了很多选择器&#xff0c;这里补充一个关系选择器。 1.1后代选择器 后代选择器&#xff0c;…...

多线程代码案例 - 2

阻塞队列 阻塞队列&#xff0c;我们熟悉的概念是队列&#xff0c;即一种先进先出的数据结构。阻塞队列&#xff0c;就是基于普通队列做出的扩展。 特点 1. 线程安全的 2. 具有阻塞特性 &#xff08;a&#xff09;如果针对一个已经满了的队列进行入队列&#xff0c;此时入队操…...

Qt实现鼠标右键弹出弹窗退出

Qt鼠标右键弹出弹窗退出 1、鼠标右键实现1.1 重写鼠标点击事件1.2 添加头文件1.3 添加定义2、添加菜单2.1添加菜单头文件2.2创建菜单对象2.3 显示菜单 3、添加动作3.1添加动作资源文件3.2 添加头文件3.3 创建退出动作对象3.4菜单添加动作对象 4、在当前鼠标位置显示菜单4.1当前…...

AI绘画中的LoRa是什么?

Lora是一个多义词&#xff0c;根据不同的上下文可以指代多种事物。以下将详细介绍几种主要的含义&#xff1a; LoRa技术 LoRa&#xff08;Long Range Radio&#xff09;是一种低功耗广域网&#xff08;LPWAN&#xff09;无线通信技术&#xff0c;以其远距离、低功耗和低成本的特…...

LaTeX、KaTeX、Markdown 的用法

文章目录 1. LaTeX 用法概述1.1 LaTeX简介1.2 优点与应用场景2. LaTeX 基础语法2.1 文档结构2.2 文本格式化2.3 数学公式3. KaTeX 用法3.1 KaTeX简介3.2 基本使用方法3.2.1 引入KaTeX3.2.2 渲染数学公式3.2.3 自定义配置3.3 与LaTeX的兼容性4. Markdown 用法4.1 Markdown简介4.…...

Python 如何高效实现 PDF 内容差异对比

Python 如何高效实现 PDF 内容差异对比 1. 安装 PyMuPDF 库2. 获取 PDF 内容通过文件路径获取通过 URL 获取 3. 提取 PDF 每页信息4. 内容对比metadata 差异文本对比可视化对比 5. 提升对比效率通过哈希值快速判断页面是否相同早停机制多进程机制 6. 其他 最近有接触到 PDF 内容…...

JJJ:generic netlink例程分析

接嵌入式毕设、课设辅导、技术咨询&#xff0c;欢迎私信 完整代码&#xff1a;github代码仓链接 若想要和指定的generic netlink family通信&#xff0c;如: 994 static struct genl_family genl_ctrl __ro_after_init { // generic netlink子协议995 .module THIS_MODU…...

3D图像重建中Bundle Adjustment的推导与实现

介绍 捆集调整(Bundle Adjustment),也称为光束平差法,是一种利用来自多台相机的图像数据同时优化相机位置和姿态以及 3D 点位置的技术。该技术历史相当悠久,于 1958 年由 DC Brown1 首次提出。 最初这是美国空军正在进行的从航拍照片中恢复环境的研究,随着视觉SLAM和Sf…...

【代码模板】C语言如何修改文件权限?读写执行权限对应值是多少?(chmod(“./a.out“, 0741);bit 2 1 0表示 读 写 执行)

#include "stdio.h" #include "unistd.h"int main(int argc, char *argv[]) {if (chmod("./a.out", 0741) ! 0) {perror("Failed to set exec permission");return -1;}return 1; }0741中0是8进制&#xff0c;7是 0111&#xff0c; 4是…...

新版pycharm如何实现debug调试需要参数的python文件

在最顶上有这个选项 把鼠标移上去 点击号 选择python 具体长这样 名字随便取 script选择你要调试的python文件 脚本形参填入参数&#xff0c;如&#xff1a;--arg1 value1 --arg2 value2 点击应用确定 最后给文件打上断点&#xff0c;再点击调试按键&#xff0c;就可以调试了…...

赚钱模拟器-百宝库v0.1.1

#include<bits/stdc.h> #include<windows.h> using namespace std; int n,i,j; void welcome(); void zhuye(); void GAME(); int main(){welcome();zhuye();return 0; }void welcome(){cout<<"欢迎您使用更多资源-百宝库v0.1.1"<<endl;sys…...

实战打靶集锦-38-inclusiveness

文章目录 1. 主机发现2. 端口扫描&服务枚举3. 服务探查4.系统提权 靶机地址&#xff1a;https://download.vulnhub.com/inclusiveness/Inclusiveness.ova 1. 主机发现 目前只知道目标靶机在192.168.56.xx网段&#xff0c;通过如下的命令&#xff0c;看看这个网段上在线的主…...

01人工智能基础入门

一、AI应用场景和发展历程 1.1行业应用 1、deepdream图像生成、yolo目标检测 2、知识图谱、画风迁移 3、语音识别、计算机视觉 4、用户画像 5、百度人工智能布局 1.2发展历程 人工智能的发展经历了 3 个阶段&#xff1a; 1980年代是正式成形期&#xff0c;尚不具备影响力。 …...

SortedSet结构之用户积分实时榜单实战

Redis 中的SortedSet结构非常适合用于实现实时榜单的场景&#xff0c;它根据成员的分数自动进行排序&#xff0c;支持高效的添加、更新和查询操作。 SortedSet实时榜单的一些典型应用场景&#xff1a; 游戏中的玩家排行榜&#xff1a;在多人在线游戏中&#xff0c;使用 Sorte…...

C++_类和对象(上)

【本节目标】 面向过程和面向对象初步认识类的引入类的定义类的访问限定符及封装类的作用域.类的实例化类的对象大小的计算类成员函数的this指针 1. 面向过程和面向对象初步认识 C语言是面向过程的&#xff0c;关注的是过程&#xff0c;分析出求解问题的步骤&#xff0c;通过…...

vllm作为服务启动,无需额外编写sh文件,一步到位【Ubuntu】

看到网上有的vllm写法&#xff0c;需要额外建立一个.sh文件&#xff0c;还是不够简捷。这里提供一种直接编写service文件一步到位的写法&#xff1a; vi /etc/systemd/system/vllm.service [Unit] DescriptionvLLM Service Afternetwork.target[Service] Typesimple Userroot…...

Mathematics | Branch

注&#xff1a;本文为“遇见数学”翻译的 “数学分支概览” 两篇文章合辑。 数学世界的版图&#xff1a;主要分支概览&#xff08;上&#xff09; 原创 遇见数学 2025 年 04 月 03 日 12:02 河南 数学的分支&#xff08;Areas of Mathematics&#xff09; 在文艺复兴之前&am…...

8.5/Q1,Charls最新文章解读

文章题目&#xff1a;Associations of estimated glucose disposal rate with frailty progression: results from two prospective cohorts DOI&#xff1a;10.1186/s12933-025-02650-7 中文标题&#xff1a;估计葡萄糖处理率与虚弱进展的关系&#xff1a;两个前瞻性队列的结果…...

PCL学习(5)随机采样一致性算法RANSAC

一、RANSAC概念及作用 1.1 基本概念 RANSAC是一种鲁棒的参数估计方法&#xff0c;用于从包含大量异常值的数据中拟合数学模型。其核心思想是通过随机采样和迭代验证&#xff0c;找到最优的模型参数&#xff0c;避免异常值的干扰。 1.2 核心思想 随机采样&#xff1a;每次从数…...

app逆向专题一:如何下载app

app逆向专题一&#xff1a;如何下载app 一、打开豌豆荚官网 一、打开豌豆荚官网 打开豌豆荚官网豌豆荚&#xff0c;在右上角搜索框中输入要下载的app名称 依次点击搜索–查看–普通下载&#xff0c;即可将apk文件下载到本地电脑上。...

将 DataFrame 中某一列的列表拆分成多个独立的列的方式

要将 DataFrame 中某一列的列表拆分成多个独立的列&#xff0c;可以使用以下方法&#xff0c;具体取决于数据结构和需求&#xff1a; 场景示例 假设 DataFrame 中 genres 列存储的是列表&#xff08;如 [drama, action]&#xff09;&#xff0c;目标是将每个列表元素拆分成多列…...

VUE+SPRINGBOOT+语音技术实现智能语音歌曲管理系统

语音控制歌曲的播放、暂停、增删改查 <template><div class"Music-container"><div style"margin: 10px 0"><!--检索部分--><el-input style"width: 200px;" placeholder"请输入歌曲名称"v-model"sen…...