2023年09月 C/C++(六级)真题解析#中国电子学会#全国青少年软件编程等级考试

C/C++编程(1~8级)全部真题・点这里
Python编程(1~6级)全部真题・点这里
第1题:生日相同
在一个有180人的大班级中,存在两个人生日相同的概率非常大,现给出每个学生的名字,出生月日。试找出所有生日相同的学生。
时间限制:1000
内存限制:65536
输入
第一行为整数n,表示有n个学生,n ≤ 180。此后每行包含一个字符串和两个整数,分别表示学生的名字(名字第一个字母大写,其余小写,不含空格,且长度小于20)和出生月(1 ≤ m ≤ 12)日(1 ≤ d ≤ 31)。名字、月、日之间用一个空格分隔
输出
每组生日相同的学生,输出一行,其中前两个数字表示月和日,后面跟着所有在当天出生的学生的名字,数字、名字之间都用一个空格分隔。对所有的输出,要求按日期从前到后的顺序输出。 对生日相同的名字,按名字从短到长按序输出,长度相同的按字典序输出。如没有生日相同的学生,输出”None”
样例输入
6
Avril 3 2
Candy 4 5
Tim 3 2
Sufia 4 5
Lagrange 4 5
Bill 3 2
样例输出
3 2 Tim Bill Avril
4 5 Candy Sufia Lagrange
以下是使用C语言编程解决方案:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>#define MAX_STUDENTS 180
#define MAX_NAME_LENGTH 20// 定义学生结构体
typedef struct {char name[MAX_NAME_LENGTH];int month;int day;
} Student;// 比较函数:按照生日先后顺序进行比较
int compare(const void* a, const void* b) {const Student* studentA = (const Student*)a;const Student* studentB = (const Student*)b;if (studentA->month != studentB->month) {return studentA->month - studentB->month;} else {return studentA->day - studentB->day;}
}int main() {int n; // 学生数量scanf("%d", &n);// 创建学生数组Student students[MAX_STUDENTS];// 读取学生信息for (int i = 0; i < n; i++) {scanf("%s %d %d", students[i].name, &students[i].month, &students[i].day);}// 按照生日先后顺序对学生数组进行排序qsort(students, n, sizeof(Student), compare);// 遍历学生数组,找出生日相同的学生int currentMonth = students[0].month;int currentDay = students[0].day;int count = 1; // 相同生日学生的数量for (int i = 1; i < n; i++) {if (students[i].month == currentMonth && students[i].day == currentDay) {count++;} else {if (count > 1) {// 输出生日相同的学生信息printf("%d %d", currentMonth, currentDay);for (int j = i - count; j < i; j++) {printf(" %s", students[j].name);}printf("\n");}currentMonth = students[i].month;currentDay = students[i].day;count = 1;}}// 输出最后一组生日相同的学生信息if (count > 1) {printf("%d %d", currentMonth, currentDay);for (int j = n - count; j < n; j++) {printf(" %s", students[j].name);}printf("\n");}// 如果没有生日相同的学生if (currentMonth == students[n - 1].month && currentDay == students[n - 1].day && count == 1) {printf("None\n");}return 0;
}
在这个解决方案中,我们使用了一个Student结构体来存储学生的姓名、月份和日期信息。
首先,我们读取学生的数量。
然后,创建一个学生数组students,并使用循环逐个读取学生的姓名、月份和日期信息。
接下来,我们使用qsort函数对学生数组进行排序,按照生日先后顺序进行排序,使用自定义的compare函数进行比较。
然后,我们遍历学生数组,找出生日相同的学生。通过维护一个当前生日的月份和日期,以及一个计数器count来判断是否有相同生日的学生。
当遇到新的生日时,如果count大于1,则输出上一个生日相同的学生组的信息,包括月份、日期和学生的姓名。
最后,如果最后一组生日相同的学生的count大于1,则输出最后一组生日相同的学生组的信息。
如果没有生日相同的学生,则输出"None"。
第2题:合法出栈序列
给定一个由不同小写字母构成的长度不超过8的字符串x,现在要将该字符串的字符依次压入栈中,然后再全部弹出。
要求左边的字符一定比右边的字符先入栈,出栈顺序无要求。
再给定若干字符串,对每个字符串,判断其是否是可能的x中的字符的出栈序列。
时间限制:1000
内存限制:65536
输入
第一行是原始字符串x 后面有若干行,每行一个字符串
输出
对除第一行以外的每个字符串,判断其是否是可能的出栈序列。如果是,输出"YES",否则,输出"NO"
样例输入
abc
abc
bca
cab
样例输出
YES
YES
NO
以下是解决该问题的C语言代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>#define MAX_LENGTH 9// 定义栈结构
typedef struct {char data[MAX_LENGTH];int top;
} Stack;// 初始化栈
void initStack(Stack* stack) {stack->top = -1;
}// 入栈操作
void push(Stack* stack, char c) {stack->data[++stack->top] = c;
}// 出栈操作
char pop(Stack* stack) {return stack->data[stack->top--];
}// 判断字符串是否是可能的出栈序列
int isPossibleSequence(const char* x, const char* sequence) {int xLen = strlen(x);int seqLen = strlen(sequence);if (xLen != seqLen) {return 0;}Stack stack;initStack(&stack);int xIndex = 0;int seqIndex = 0;while (xIndex < xLen && seqIndex < seqLen) {if (stack.top >= 0 && stack.data[stack.top] == sequence[seqIndex]) {// 栈顶元素与序列当前字符相等,出栈pop(&stack);seqIndex++;} else if (x[xIndex] == sequence[seqIndex]) {// x当前字符与序列当前字符相等,入栈push(&stack, x[xIndex]);xIndex++;} else {// x当前字符与序列当前字符都不相等,不满足条件return 0;}}// 检查栈是否为空while (stack.top >= 0 && seqIndex < seqLen) {if (stack.data[stack.top] == sequence[seqIndex]) {// 栈顶元素与序列当前字符相等,出栈pop(&stack);seqIndex++;} else {// 栈顶元素与序列当前字符不相等,不满足条件return 0;}}return stack.top == -1 && seqIndex == seqLen;
}int main() {char x[MAX_LENGTH];scanf("%s", x);int n;scanf("%d", &n);char sequence[MAX_LENGTH];for (int i = 0; i < n; i++) {scanf("%s", sequence);if (isPossibleSequence(x, sequence)) {printf("YES\n");} else {printf("NO\n");}}return 0;
}
在这个解决方案中,我们使用了一个栈来模拟字符的入栈和出栈操作。
首先,我们读取原始字符串x,并获取其长度。
然后,读取整数n,表示待判断的出栈序列的数量。
接下来,我们使用一个循环,对每个出栈序列进行判断。
在判断函数isPossibleSequence中,我们使用两个指针xIndex和seqIndex分别表示原始字符串x和当前出栈序列的位置。
我们使用一个while循环来遍历出栈序列,同时判断字符的入栈和出栈操作。
如果栈顶元素与序列当前字符相等,则出栈,seqIndex加一。
如果x当前字符与序列当前字符相等,则入栈,xIndex加一。
如果x当前字符与序列当前字符都不相等,则不满足条件,返回0。
在遍历完出栈序列后,我们检查栈是否为空,以及seqIndex是否等于序列长度,如果满足条件,则返回1,否则返回0。
最后,根据返回的结果,输出"YES"或"NO"。
第3题:括号画家
Candela是一名漫画家,她有一个奇特的爱好,就是在纸上画括号。这一天,刚刚起床的Candela画了一排括号序列,其中包含小括号()、中括号[]和大括号{},总长度为N。这排随意绘制的括号序列显得杂乱无章,于是Candela定义了什么样的括号序列是美观的:
(1) 空的括号序列是美观的;
(2) 若括号序列A是美观的,则括号序列(A)、[A]、{A}也是美观的;
(3) 若括号序列A、B都是美观的,则括号序列AB也是美观的;
例如 [(){}]() 是美观的括号序列,而 )({)[}]( 则不是。
现在Candela想知道她画出的括号序列是不是美观的。你能帮帮她吗?
时间限制:1000
内存限制:262144
输入
一个括号序列,长度不超过10000。
输出
如果它是美观的,输出Yes,否则输出No。
样例输入
{}[(){}]()
样例输出
Yes
以下是解决该问题的C语言代码:
#include <stdio.h>
#include <stdlib.h>#define MAX_LENGTH 10001// 定义栈结构
typedef struct {char data[MAX_LENGTH];int top;
} Stack;// 初始化栈
void initStack(Stack* stack) {stack->top = -1;
}// 入栈操作
void push(Stack* stack, char c) {stack->data[++stack->top] = c;
}// 出栈操作
char pop(Stack* stack) {return stack->data[stack->top--];
}// 判断括号是否匹配
int isMatching(char open, char close) {if (open == '(' && close == ')') {return 1;} else if (open == '[' && close == ']') {return 1;} else if (open == '{' && close == '}') {return 1;} else {return 0;}
}// 判断括号序列是否美观
int isBeautifulSequence(const char* sequence) {Stack stack;initStack(&stack);int i = 0;while (sequence[i] != '\0') {if (sequence[i] == '(' || sequence[i] == '[' || sequence[i] == '{') {// 左括号入栈push(&stack, sequence[i]);} else if (sequence[i] == ')' || sequence[i] == ']' || sequence[i] == '}') {// 右括号与栈顶元素进行匹配if (stack.top < 0 || !isMatching(stack.data[stack.top], sequence[i])) {// 栈为空或者匹配失败,不满足美观条件return 0;} else {// 括号匹配成功,出栈pop(&stack);}}i++;}// 检查栈是否为空return stack.top == -1;
}int main() {char sequence[MAX_LENGTH];scanf("%s", sequence);if (isBeautifulSequence(sequence)) {printf("Yes\n");} else {printf("No\n");}return 0;
}
在这个解决方案中,我们使用一个栈来模拟括号的匹配过程。
首先,我们定义了一个栈结构Stack,其中data数组用于存储括号,top表示栈顶索引。
然后,我们定义了initStack函数用于初始化栈,push函数用于将括号入栈,pop函数用于将括号出栈。
接下来,我们定义了isMatching函数,用于判断左右括号是否匹配。
在判断函数isBeautifulSequence中,我们遍历括号序列中的每个字符。
如果字符是左括号,则将其入栈。
如果字符是右括号,则与栈顶元素进行匹配判断。如果栈为空或者匹配失败,即不满足美观条件,返回0;否则,括号匹配成功,将栈顶元素出栈。
在遍历完括号序列后,我们检查栈是否为空,如果为空,则满足美观条件,返回1;否则,栈中还有未匹配的左括号,不满足美观条件,返回0。
最后,根据返回的结果,输出"Yes"或"No"。
第4题:表达式求值
求一个可能包含加、减、乘、除、乘方运算的中缀表达式的值。
在计算机中,我们常用栈来解决这一问题。首先将中缀表达式转换到后缀表达式,然后对后缀表达式求值。
加、减、乘、除、乘方分别用+,-,*, /, ^来表示。表达式可以有圆括号()。
时间限制:1000
内存限制:65536
输入
第一行为测试数据的组数N。 接下来的N行,每行是一个中缀表达式。 每个表达式中,圆括号、运算符和运算数相互之间都用空格分隔,运算数是整数。一般运算数可正可负(负数的符号和数字之间无空格),指数一定为自然数(0和正整数)。不必考虑除0的情况。每个运算数均可由int放下。不必考虑溢出。中缀表达式的字符串长度不超过600。乘方的优先级比乘除都高,结合性是向左结合,如2 ^ 3 ^ 4表示( 2 ^ 3 ) ^ 4 = 4096。除法的商向下取整。
输出
对每一组测试数据输出一行,为表达式的值
样例输入
2
31 * ( 5 - ( -3 + 25 ) ) + 70 ^ 2
2 * 5 + 6 * ( 7 - 8 ) + 6
样例输出
4373
10
以下是解决该问题的C语言代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include <math.h>#define MAX_LENGTH 601// 定义运算符栈结构
typedef struct {char data[MAX_LENGTH];int top;
} OperatorStack;// 定义操作数栈结构
typedef struct {int data[MAX_LENGTH];int top;
} OperandStack;// 初始化运算符栈
void initOperatorStack(OperatorStack* stack) {stack->top = -1;
}// 运算符栈是否为空
int isOperatorStackEmpty(OperatorStack* stack) {return stack->top == -1;
}// 入栈操作
void pushOperatorStack(OperatorStack* stack, char c) {stack->data[++stack->top] = c;
}// 出栈操作
char popOperatorStack(OperatorStack* stack) {return stack->data[stack->top--];
}// 获取运算符栈顶元素
char getOperatorStackTop(OperatorStack* stack) {return stack->data[stack->top];
}// 初始化操作数栈
void initOperandStack(OperandStack* stack) {stack->top = -1;
}// 操作数栈是否为空
int isOperandStackEmpty(OperandStack* stack) {return stack->top == -1;
}// 入栈操作
void pushOperandStack(OperandStack* stack, int num) {stack->data[++stack->top] = num;
}// 出栈操作
int popOperandStack(OperandStack* stack) {return stack->data[stack->top--];
}// 获取操作数栈顶元素
int getOperandStackTop(OperandStack* stack) {return stack->data[stack->top];
}// 判断运算符的优先级
int getPriority(char c) {if (c == '+' || c == '-') {return 1;} else if (c == '*' || c == '/') {return 2;} else if (c == '^') {return 3;} else {return 0;}
}// 判断字符是否为运算符
int isOperator(char c) {return (c == '+' || c == '-' || c == '*' || c == '/' || c == '^');
}// 执行运算
int performOperation(int operand1, int operand2, char operator) {switch (operator) {case '+':return operand1 + operand2;case '-':return operand1 - operand2;case '*':return operand1 * operand2;case '/':return operand1 / operand2;case '^':return pow(operand1, operand2);default:return 0;}
}// 将中缀表达式转换为后缀表达式
void infixToPostfix(char* infixExpression, char* postfixExpression) {OperatorStack operatorStack;initOperatorStack(&operatorStack);int infixLength = strlen(infixExpression);int postfixIndex = 0;for (int i = 0; i < infixLength; i++) {char currentChar = infixExpression[i];if (isspace(currentChar)) {continue; // 忽略空格}if (isdigit(currentChar)) {// 如果是数字,直接添加到后缀表达式中postfixExpression[postfixIndex++] = currentChar;} else if (currentChar == '(') {// 如果是左括号,入栈pushOperatorStack(&operatorStack, currentChar);} else if (isOperator(currentChar)) {// 如果是运算符while (!isOperatorStackEmpty(&operatorStack) &&getPriority(getOperatorStackTop(&operatorStack)) >= getPriority(currentChar) &&getOperatorStackTop(&operatorStack) != '(') {// 当前运算符的优先级小于等于栈顶运算符的优先级,将栈顶运算符出栈并添加到后缀表达式中postfixExpression[postfixIndex++] = popOperatorStack(&operatorStack);}// 当前运算符入栈pushOperatorStack(&operatorStack, currentChar);} else if (currentChar == ')') {// 如果是右括号,将栈顶运算符出栈并添加到后缀表达式中,直到遇到左括号为止while (!isOperatorStackEmpty(&operatorStack) && getOperatorStackTop(&operatorStack) != '(') {postfixExpression[postfixIndex++] = popOperatorStack(&operatorStack);}// 左括号出栈if (!isOperatorStackEmpty(&operatorStack) && getOperatorStackTop(&operatorStack) == '(') {popOperatorStack(&operatorStack);}}}// 将栈中剩余的运算符出栈并添加到后缀表达式中while (!isOperatorStackEmpty(&operatorStack)) {postfixExpression[postfixIndex++] = popOperatorStack(&operatorStack);}// 添加字符串结束符postfixExpression[postfixIndex] = '\0';
}// 计算后缀表达式的值
int evaluatePostfix(char* postfixExpression) {OperandStack operandStack;initOperandStack(&operandStack);int postfixLength = strlen(postfixExpression);for (int i = 0; i < postfixLength; i++) {char currentChar = postfixExpression[i];if (isdigit(currentChar)) {// 如果是数字,将其转换为整数并入栈int num = currentChar - '0';while (isdigit(postfixExpression[i + 1])) {num = num * 10 + (postfixExpression[i + 1] - '0');i++;}pushOperandStack(&operandStack, num);} else if (isOperator(currentChar)) {// 如果是运算符,从栈中取出两个操作数进行运算,并将结果入栈int operand2 = popOperandStack(&operandStack);int operand1 = popOperandStack(&operandStack);int result = performOperation(operand1, operand2, currentChar);pushOperandStack(&operandStack, result);}}// 返回栈顶元素,即为表达式的值return getOperandStackTop(&operandStack);
}int main() {int N;scanf("%d", &N);char expression[MAX_LENGTH];fgets(expression, MAX_LENGTH, stdin); // 读取换行符for (int i = 0; i < N; i++) {fgets(expression, MAX_LENGTH, stdin);// 将中缀表达式转换为后缀表达式char postfixExpression[MAX_LENGTH];infixToPostfix(expression, postfixExpression);// 计算后缀表达式的值int result = evaluatePostfix(postfixExpression);printf("%d\n", result);}return 0;
}
在这个解决方案中,我们使用两个栈来解决中缀表达式求值的问题。
首先,我们定义了一个运算符栈结构OperatorStack和一个操作数栈结构OperandStack,分别用于存储运算符和操作数。
然后,我们定义了一系列栈操作的函数,包括初始化栈、判断栈是否为空、入栈操作、出栈操作和获取栈顶元素。
接下来,我们定义了一系列辅助函数,包括判断运算符优先级的getPriority函数,判断字符是否为运算符的isOperator函数以及执行运算的performOperation函数。
在infixToPostfix函数中,我们将中缀表达式转换为后缀表达式。我们遍历中缀表达式中的每个字符,如果是数字,则直接添加到后缀表达式中;如果是左括号,则入栈;如果是运算符,则与栈顶运算符进行优先级比较,如果当前运算符优先级较低,则将栈顶运算符出栈并添加到后缀表达式中,直到遇到左括号或者栈为空;如果是右括号,则将栈中的运算符出栈并添加到后缀表达式中,直到遇到左括号;最后,将栈中剩余的运算符出栈并添加到后缀表达式中。
相关文章:
2023年09月 C/C++(六级)真题解析#中国电子学会#全国青少年软件编程等级考试
C/C编程(1~8级)全部真题・点这里 Python编程(1~6级)全部真题・点这里 第1题:生日相同 在一个有180人的大班级中,存在两个人生日相同的概率非常大,现给出每个学生的名字,出生月日。试…...
docker-compose 部署示例
文章目录 docker-compose文件格式docker-compose 下载 docker-compose文件格式 这个软件的实际很小,只是根据配置文件产生一些docker命令来执行可以。 配置文件本身是yml的格式,如下 version: 3.5services:# Etherpad: real-time collaborative docume…...
新版WordPress插件短视频去水印小程序源码
最新版去水印小程序源码,本版本全开源,是WordPress插件 上传到Wordpress 安装插件 启动之后 绑定自己的小程序id wordpress可以在宝塔一键部署 也可以用我的这个 搭建前我们需要一下东西: 第一个:一台服务器(国内外都可…...
如何提高MES系统的落地成功率?
导 读 ( 文/ 2768 ) 制造执行系统(MES)在现代制造业中扮演着至关重要的角色,但实施MES系统并取得成功并非易事。为了帮助企业提高MES系统的落地成功率,本文将介绍关键的方法和策略。通过深入了解业务需求、有效的团队合作、全面的…...
private key ssh连接服务器
这里用到的软件是PuTTY。 https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html 保存本地rsa文件后,打开软件PuTTYgen,点击Load导入文件,输入Key passphrase即密码,保存至本地。 随后在PuTTY配置ssh的用户名 来Cred…...
PDF-Word-图片等的互相转换
轻闪PDF客户端 - 功能强大的一站式PDF工具 | PDF编辑、转换、阅读 上面页面支持PDF转换成各类别:鼠标停留在PDF工具,点击转换类型即可在线转换 Word-PDF:word文档打开word文件中,点击文件->另存为->另存为的位置->保存…...
【VR开发】【Unity】0-课程简介和概述
【说明】 这是我录制的一套VR基础开发课程的文字版本,更加便于快速参考。 应大家在后台所提的需求,从今天开始,我计划带给大家一套完整达40课时的VR开发基础课程。 在开始学习前需要注意如下几点: 本教程基于Unity2022.2.1f1版…...
Java面试题-Java核心基础-第三天(基本数据类型)
目录 一、Java的基本数据类型了解吗? 二、基本类型和包装类型的区别 三、包装类型的缓存机制了解吗? 四、自动拆箱和自动装箱了解吗? 五、为什么浮点数在运算的时候会有精度损失的风险? 六、如何解决浮点数在运算时存在的精度…...
Bean容器里的单例是根据什么识别它是同一个类呢?(比如容器里创建了A类,再去用这个A类的时候,Bean容器怎么知道这个就是A类?)
Spring容器中的Bean的识别主要依赖于Bean的名称(ID)和类型。以下是详细解释: Bean的名称(ID):每个Bean在Spring容器中都必须有一个唯一的名称(ID)。这个名称通常在配置文件中、Java…...
简述 happens - before 八大规则
“Happens-Before” 是Java内存模型中的概念,用于描述多线程程序中操作之间的顺序和可见性关系。它定义了一组规则,哪些操作具有可预测的行为。以下是"Happens-Before" 的八大规则: 程序顺序规则(Program Order Rule&am…...
windows flask 多进程高并发
最近在做的一个项目,需要将十几个python函数封装程flask服务供外界调用,每个函数之间没有什么关系,相互独立。虽然感觉不是很难,但因为用的windows系统,遇到的坑比较多,在此一一总结一下。 flask偶尔出现卡…...
【设计模式】十、组合模式
文章目录 案例组合模式基本介绍类图代码 组合模式在 JDK 集合的源码分析组合模式的注意事项和细节 案例 编写程序展示一个学校院系结构:需求是这样,要在一个页面中展示出学校的院系组成,一个学校有多个学院,一个学院有多个系。如…...
React知识点系列(8)-每天10个小知识
目录 1. 在 React 中,什么是受控组件和非受控组件?请解释一下它们之间的区别和适用场景。2. 如何使用 React 的 useReducer Hook 来管理组件状态?请描述一下 useReducer 的工作原理和适用场景。工作原理:适用场景: 3. …...
rust注释
一、普通注释 // 这是第一种注释方式/* 这是第二种注释方式 */ /* 多行注释 多行注释 多行注释*/二、文档注释 ///外部行文档注释。为接下来的项生成帮助文档 //! 内部行文档注释。为注释所属于的项生成帮助文档/**...*/外部块文档注释。为接下来的项生成帮助文档 /*!...*/内…...
【Java学习之道】GUI开发的基本概念
引言 在这一章,我们将一起走进Java的图形用户界面(GUI)开发的世界。在你阅读完这篇文章后,你将能够了解什么是GUI,以及如何使用Java进行GUI的开发。 一、什么是GUI 首先,让我们来解答一个许多初学者都会…...
Docker部署gitlab_ce(避坑版---社区版)
1 下载docker 2 下载gitlab镜像 3 运行 4 进入容器内部修改 5 在浏览器里访问 6 修改root密码(如果忘记请修改) 1 下载docker # 安装依赖 yum install -y yum-utils device-mapper-persistent-data lvm2# 设置yum源 yum-config-manager --add-repo https…...
数据仓库DW-理论知识储备
数据仓库DW 数据仓库具备 采集数据、分析数据、存储数据的功能,最后得出一些有用的数据,一些目标数据来使用。 采集来自不同源的数据,然后对这些数据进行分析和计算得出一些有用的指标,提供数据决策支持。 数据的来源有ÿ…...
SpringBoot 如何优雅的停机
这里写目录标题 1 介绍2 使用2.1 开启 hook2.2 禁用 hook 3 手动指定 hook 1 介绍 SpringBoot 如果需要使用hook则需要开启spring.main.register-shutdown-hooktrue(默认为true) 如果使用kill -9则不会出发JVM的hook,kill可以正常触发hook server:port: 8080shutd…...
详细教程:Postman 怎么调试 WebSocket
WebSocket 是一个支持双向通信的网络协议,它在实时性和效率方面具有很大的优势。Postman 是一个流行的 API 开发工具,它提供了许多功能来测试和调试 RESTful API 接口,最新的版本也支持 WebSocket 接口的调试。想要学习更多关于 Postman 的知…...
互联网Java工程师面试题·Java 并发编程篇·第五弹
目录 52、什么是线程池? 为什么要使用它? 53、怎么检测一个线程是否拥有锁? 54、你如何在 Java 中获取线程堆栈? 55、JVM 中哪个参数是用来控制线程的栈堆栈小的? 56、Thread 类中的 yield 方法有什么作用? 57、…...
多模态2025:技术路线“神仙打架”,视频生成冲上云霄
文|魏琳华 编|王一粟 一场大会,聚集了中国多模态大模型的“半壁江山”。 智源大会2025为期两天的论坛中,汇集了学界、创业公司和大厂等三方的热门选手,关于多模态的集中讨论达到了前所未有的热度。其中,…...
Linux链表操作全解析
Linux C语言链表深度解析与实战技巧 一、链表基础概念与内核链表优势1.1 为什么使用链表?1.2 Linux 内核链表与用户态链表的区别 二、内核链表结构与宏解析常用宏/函数 三、内核链表的优点四、用户态链表示例五、双向循环链表在内核中的实现优势5.1 插入效率5.2 安全…...
大型活动交通拥堵治理的视觉算法应用
大型活动下智慧交通的视觉分析应用 一、背景与挑战 大型活动(如演唱会、马拉松赛事、高考中考等)期间,城市交通面临瞬时人流车流激增、传统摄像头模糊、交通拥堵识别滞后等问题。以演唱会为例,暖城商圈曾因观众集中离场导致周边…...
理解 MCP 工作流:使用 Ollama 和 LangChain 构建本地 MCP 客户端
🌟 什么是 MCP? 模型控制协议 (MCP) 是一种创新的协议,旨在无缝连接 AI 模型与应用程序。 MCP 是一个开源协议,它标准化了我们的 LLM 应用程序连接所需工具和数据源并与之协作的方式。 可以把它想象成你的 AI 模型 和想要使用它…...
从深圳崛起的“机器之眼”:赴港乐动机器人的万亿赛道赶考路
进入2025年以来,尽管围绕人形机器人、具身智能等机器人赛道的质疑声不断,但全球市场热度依然高涨,入局者持续增加。 以国内市场为例,天眼查专业版数据显示,截至5月底,我国现存在业、存续状态的机器人相关企…...
Frozen-Flask :将 Flask 应用“冻结”为静态文件
Frozen-Flask 是一个用于将 Flask 应用“冻结”为静态文件的 Python 扩展。它的核心用途是:将一个 Flask Web 应用生成成纯静态 HTML 文件,从而可以部署到静态网站托管服务上,如 GitHub Pages、Netlify 或任何支持静态文件的网站服务器。 &am…...
C++ 基础特性深度解析
目录 引言 一、命名空间(namespace) C 中的命名空间 与 C 语言的对比 二、缺省参数 C 中的缺省参数 与 C 语言的对比 三、引用(reference) C 中的引用 与 C 语言的对比 四、inline(内联函数…...
Cloudflare 从 Nginx 到 Pingora:性能、效率与安全的全面升级
在互联网的快速发展中,高性能、高效率和高安全性的网络服务成为了各大互联网基础设施提供商的核心追求。Cloudflare 作为全球领先的互联网安全和基础设施公司,近期做出了一个重大技术决策:弃用长期使用的 Nginx,转而采用其内部开发…...
【Zephyr 系列 10】实战项目:打造一个蓝牙传感器终端 + 网关系统(完整架构与全栈实现)
🧠关键词:Zephyr、BLE、终端、网关、广播、连接、传感器、数据采集、低功耗、系统集成 📌目标读者:希望基于 Zephyr 构建 BLE 系统架构、实现终端与网关协作、具备产品交付能力的开发者 📊篇幅字数:约 5200 字 ✨ 项目总览 在物联网实际项目中,**“终端 + 网关”**是…...
NFT模式:数字资产确权与链游经济系统构建
NFT模式:数字资产确权与链游经济系统构建 ——从技术架构到可持续生态的范式革命 一、确权技术革新:构建可信数字资产基石 1. 区块链底层架构的进化 跨链互操作协议:基于LayerZero协议实现以太坊、Solana等公链资产互通,通过零知…...
