北航第五次数据结构与程序设计编程题复习

北航第五次数据结构与程序设计编程题复习

  • 树叶节点遍历(树-基础题)
  • 计算器(表达式计算-表达式树实现)
  • 服务优化
  • 词频统计(树实现)

树叶节点遍历(树-基础题)

【问题描述】

从标准输入中输入一组整数,在输入过程中按照左子结点值小于根结点值、右子结点值大于等于根结点值的方式构造一棵二叉查找树,然后从左至右输出所有树中叶结点的值及高度(根结点的高度为1)。例如,若按照以下顺序输入一组整数:50、38、30、64、58、40、10、73、70、50、60、100、35,则生成下面的二叉查找树:
在这里插入图片描述从左到右的叶子结点包括:10、35、40、50、60、70、100,叶结点40的高度为3,其它叶结点的高度都为4。

【输入形式】

先从标准输入读取整数的个数,然后从下一行开始输入各个整数,整数之间以一个空格分隔。
【输出形式】

按照从左到右的顺序分行输出叶结点的值及高度,值和高度之间以一个空格分隔。
【样例输入】

13

50 38 30 64 58 40 10 73 70 50 60 100 35
【样例输出】

10 4

35 4

40 3

50 4

60 4

70 4

100 4
【样例说明】

按照从左到右的顺序输出叶结点(即没有子树的结点)的值和高度,每行输出一个。
【评分标准】

该题要求输出所有叶结点的值和高度,提交程序名为:bst.c


这个题的大体框架就是逐点插入法,但是要多做一步:结点结构体中多加一项元素deep,用于存放节点的深度。结点插入时,每和已有树中结点比较一次,deep加一。
题目要求从左往右打印叶子结点,其实就是中序遍历的思想。但实际上,中间的根结点不可能是需要访问的叶子结点(你都是根了肯定有子节点啊),因此只需要先遍历左子树再右子树就可以了。

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
typedef struct node
{int val;int deep;struct node*left;struct node*right;
}BTNode;
BTNode* root=NULL;
void insert(int);
void leaf(BTNode*);
int main()
{int n,item;scanf("%d",&n);for(int i=0;i<n;i++){scanf("%d",&item);insert(item);}leaf(root);
}
void insert(int item)
{BTNode* new=(BTNode*)malloc(sizeof(BTNode));new->deep=1;new->left=new->right=NULL;new->val=item;if(root==NULL){root=new;return;}BTNode* cur=root;while(1){if(item<cur->val){new->deep++;if(cur->left==NULL){cur->left=new;   break;          }elsecur=cur->left;}else if(item>=cur->val){new->deep++;if(cur->right==NULL){cur->right=new;break;}  elsecur=cur->right;}}
}
void leaf(BTNode* root)
{if(root==NULL)return;if(root->left==NULL&&root->right==NULL)printf("%d %d\n",root->val,root->deep);leaf(root->left);leaf(root->right);
}

计算器(表达式计算-表达式树实现)

【问题描述】

从标准输入中读入一个整数算术运算表达式,如24 / ( 1 + 2 + 36 / 6 / 2 - 2) * ( 12 / 2 / 2 )= ,计算表达式结果,并输出。

要求:
1、表达式运算符只有+、-、*、/,表达式末尾的=字符表示表达式输入结束,表达式中可能会出现空格;
2、表达式中会出现圆括号,括号可能嵌套,不会出现错误的表达式;
3、出现除号/时,以整数相除进行运算,结果仍为整数,例如:5/3结果应为1。

4、要求采用表达式树来实现表达式计算。

表达式树(expression tree):

我们已经知道了在计算机中用后缀表达式和栈来计算中缀表达式的值。在计算机中还有一种方式是利用表达式树来计算表达式的值。表达式树是这样一种树,其根节点为操作符,非根节点为操作数,对其进行后序遍历将计算表达式的值。由后缀表达式生成表达式树的方法如下:

l 读入一个符号:

l 如果是操作数,则建立一个单节点树并将指向他的指针推入栈中;

l 如果是运算符,就从栈中弹出指向两棵树T1和T2的指针(T1先弹出)并形成一棵新树,树根为该运算符,它的左、右子树分别指向T2和T1,然后将新树的指针压入栈中。

例如输入的后缀表达为:

ab+cde+**

则生成的表达式树为:
在这里插入图片描述

【输入形式】

从键盘输入一个以=结尾的整数算术运算表达式。操作符和操作数之间可以有空格分隔。

【输出形式】

首先在屏幕上输出表达式树根、左子节点及右子节点上的运算符或操作数,中间由一个空格分隔,最后有一个回车(如果无某节点,则该项不输出)。然后输出表达式计算结果。
【样例输入】

24 / ( 1 + 2 + 36 / 6 / 2 - 2) * ( 12 / 2 / 2 ) =

【样例输出】

  • / /

18

【样例说明】

按照运算符及括号优先级依次计算表达式的值。在生成的表达树中,*是根节点的运算符,/ 是根节点的左子节点上运算符,/是根节点的右子节点上运算符,按题目要求要输出。

【评分标准】

通过所有测试点得满分。


我们之前用栈做过这个题,先把表达式转为逆波兰表达式,然后再计算,这次我们又多了一种办法:表达式树。
表达式树的特点是:叶结点是操作数,其他结点为操作符。
在这里插入图片描述
要构造表达式树,首先需要将表达式转化为后缀表达式。然后:
从左往右依次读入符号:
如果是操作数,则建立一个单节点树并将指向该节点的指针推入栈中
如果是运算符,则从栈中弹出两个树节点的指针并形成一棵新树,树根为运算符。然后将新树压入栈中。

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
enum set {OP,NUM};
typedef struct item
{enum set type;union{char ope;int num;}uni;
}ITEM;
typedef struct node
{ITEM item;int calnum;struct node*left;struct node*right;
}BTnode;
void remove_zero(char*);
void toReversePoland(char*);
int Priority(char);
void cal(ITEM*,int);
int main()
{char arr[100];gets(arr);remove_zero(arr);toReversePoland(arr);return 0;
}
void remove_zero(char* a)
{int i=0,j=0;while(a[j]!='\0'){if(a[j]!=' '){a[i]=a[j];j++;i++;}elsej++;}a[i]='\0';
}
void toReversePoland(char* a)
{ITEM arr[100];int index=0;char operation[100];int Top=-1;for(int i=0;i<strlen(a);i++){if(a[i]>='0'&&a[i]<='9'){int num=a[i]-'0';for(int j=i+1;j<strlen(a);j++){if(a[j]>='0'&&a[j]<='9'){num=num*10+(a[j]-'0');}else{arr[index].type=NUM;arr[index].uni.num=num;i=j-1;index++;break;}}}else if(a[i]=='=')break;else if(a[i]=='+'||a[i]=='-'||a[i]=='*'||a[i]=='/'){if(Top==-1)operation[++Top]=a[i];else{while(Top>-1&&operation[Top]!='('&&(Priority(operation[Top])>=Priority(a[i]))){arr[index].type=OP;arr[index].uni.ope=operation[Top];index++;Top--;}operation[++Top]=a[i];}}else if(a[i]=='('){operation[++Top]='(';}else if(a[i]==')'){char top=operation[Top];while(top!='('){arr[index].type=OP;arr[index].uni.ope=top;index++;Top--;top=operation[Top];}Top--;}}while(Top!=-1){arr[index].type=OP;arr[index].uni.ope=operation[Top];index++;Top--;}// for(int i=0;i<index;i++)// {//     if(arr[i].type==OP)//         printf("%c ",arr[i].uni.ope);//     else//         printf("%.2f ",arr[i].uni.num);// }cal(arr,index);
}
int Priority(char a)
{if(a=='+'||a=='-')return 1;if(a=='*'||a=='/')return 2;
}
void cal(ITEM* arr,int n)
{BTnode* stack[100];int top=0;for(int i=0;i<n;i++){if(arr[i].type==NUM){BTnode* new=(BTnode*)malloc(sizeof(BTnode));new->item=arr[i];new->calnum=arr[i].uni.num;new->left=new->right=NULL;stack[top++]=new;}else{BTnode*new=(BTnode*)malloc(sizeof(BTnode));top--;BTnode* x1=stack[top];top--;BTnode* x2=stack[top];new->left=x2;new->right=x1;if(arr[i].uni.ope=='+'){new->item=arr[i];new->calnum=x1->calnum+x2->calnum;}else if(arr[i].uni.ope=='-'){new->item=arr[i];new->calnum=x2->calnum-x1->calnum;}else if(arr[i].uni.ope=='*'){new->item=arr[i];new->calnum=x2->calnum*x1->calnum;}else if(arr[i].uni.ope=='/'){new->item=arr[i];new->calnum=x2->calnum/x1->calnum;}stack[top++]=new;}}if(stack[0]->item.type==OP){printf("%c ",stack[0]->item.uni.ope);}else if(stack[0]->item.type==NUM){printf("%d ",stack[0]->calnum);}if(stack[0]->left){if(stack[0]->left->item.type==OP){printf("%c ",stack[0]->left->item.uni.ope);}else if(stack[0]->left->item.type==NUM){printf("%d ",stack[0]->left->item.uni.num);}}if(stack[0]->right){if(stack[0]->right->item.type==OP){printf("%c\n",stack[0]->right->item.uni.ope);}else if(stack[0]->right->item.type==NUM){printf("%d\n",stack[0]->right->item.uni.num);}}else{printf("\n");}printf("%d",stack[0]->calnum);
}

我在树结构体中加入了一项calnum,这一项是用于存储弹出的两个运算数运算后的值。如果遍历逆波兰表达式时,访问到运算数,那么calnum就等于运算数的值,如果是运算符,就存储弹栈出的两个数的值。

逆波兰表达式的转换我是直接copy上一次作业中写好的代码的,大家考试前也可以这么搞,就是把一些常用的算法结构写好,考试时候直接粘贴,考试浪费的时间 - -。

服务优化

【问题描述】

假设某机场所有**登机口(Gate)**呈树形排列(树的度为3),安检处为树的根,如下图所示。图中的分叉结点(编号大于等于100)表示分叉路口,登机口用小于100的编号表示(其一定是一个叶结点)。通过对机场所有出发航班的日志分析,得知每个登机口每天的平均发送旅客流量。作为提升机场服务水平的一个措施,在不改变所有航班相对关系的情况下(即:出发时间不变,原在同一登机口的航班不变),仅改变登机口(例如:将3号登机口改到5号登机口的位置),使得整体旅客到登机口的时间有所减少(即:从安检口到登机口所经过的分叉路口最少)。
在这里插入图片描述
编写程序模拟上述登机口的调整,登机口调整规则如下:

1)首先按照由大到小的顺序对输入的登机口流量进行排序,流量相同的按照登机口编号由小到大排序;

2)从上述登机口树的树根开始,将登机口按照从上到下(安检口在最上方)、从左到右的顺序,依次对应上面排序后将要调整的登机口。

例如上图的树中,若只考虑登机口,则从上到下有三层,第一层从左到右的顺序为:5、6、14、13,第二层从左到右的顺序为:7、8、9、10、1、2、18、17、16、15,第三层从左到右的顺序为:11、12、3、4、20、19。若按规则1排序后流量由大至小的前五个登机口为3、12、16、20、15,则将流量最大的3号登机口调整到最上层且最左边的位置(即:5号登机口的位置),12号调整到6号,16号调整到14号,20号调整到13号,15号调整到第二层最左边的位置(即7号登机口的位置)。

【输入形式】

1)首先按层次从根开始依次输入树结点之间的关系。其中分叉结点编号从数字100开始(树根结点编号为100,其它分叉结点编号没有规律但不会重复),登机口为编号小于100的数字(编号没有规律但不会重复,其一定是一个叶结点)。树中结点间关系用下面方式描述:

R S1 S2 S3 -1

其中R为分叉结点,从左至右S1,S2,S3分别为树叉R的子结点,其可为树叉或登机口,由于树的度为3,S1,S2,S3中至多可以2个为空,最后该行以-1和换行符结束。各项间以一个空格分隔。如:

100 101 102 103 -1

表明编号100的树根有三个子叉,编号分别为101、102和103,又如:

104 7 8 -1

表明树叉104上有2个编号分别为7和8的登机口。

假设分叉结点数不超过100个。分叉结点输入的顺序不确定,但可以确定:输入某个分叉结点信息时,其父结点的信息已经输入。

输入完所有树结点关系后,在新的一行上输入-1表示树结点关系输入完毕。

2)接下来输入登机口的流量信息,每个登机口流量信息分占一行,分别包括登机口编号(1~99之间的整数)和流量(大于0的整数),两整数间以一个空格分隔。登机口数目与前面构造树时的登机机口数目一致。

【输出形式】

按照上述调整规则中排序后的顺序(即按旅客流量由大到小,流量相同的按照登机口编号由小到大)依次分行输出每个登机口的调整结果:先输出调整前的登机口编号,然后输出字符串"->"(由英文减号字符与英文大于字符组成),再输出要调整到的登机口编号。

【样例输入】

100 101 102 103 -1

103 14 108 13 -1

101 5 104 6 -1

104 7 8 -1

102 105 106 107 -1

106 1 110 2 -1

108 16 15 -1

107 18 111 17 -1

110 3 4 -1

105 9 109 10 -1

111 20 19 -1

109 11 12 -1

-1

17 865

5 668

20 3000

13 1020

11 980

8 2202

15 1897

6 1001

14 922

7 2178

19 2189

1 1267

12 3281

2 980

18 1020

10 980

3 1876

9 1197

16 980

4 576

【样例输出】

12->5

20->6

8->14

19->13

7->7

15->8

3->9

1->10

9->1

13->2

18->18

6->17

2->16

10->15

11->11

16->12

14->3

17->4

5->20

4->19

【样例说明】

样例输入了12条树结点关系,形成了如上图的树。然后输入了20个登机口的流量,将这20个登机口按照上述调整规则1排序后形成的顺序为:12、20、8、19、7、15、3、1、9、13、18、6、2、10、11、16、14、17、5、4。最后按该顺序将所有登机口按照上述调整规则2进行调整,输出调整结果。
【评分标准】

该题要求计算并输出登机口的调整方法,提交程序名为adjust.c。


咳咳来北航当程序员阅读能力一定要好……审题占写完整道题的50%……
首先,我们看看这个题的结构体怎么定义:树的度为三,那就是三叉树,我们应该在结构体里定义left mid right三个指针。

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define MAX 100
typedef struct node
{int id;int passenger;struct node* left;struct node* mid;struct node* right;
}BTNode;BTNode* root;
int GateCount=0;
void Insert(int,BTNode*);
BTNode* findroot(int);
BTNode* find(int,BTNode*);
void Adjust(BTNode*);
int cmp1(const void* p1,const void* p2){return (*(BTNode**)p2)->passenger-(*(BTNode**)p1)->passenger;
}
int cmp2(const void* p1,const void* p2){return (*(BTNode**)p1)->id-(*(BTNode**)p2)->id;
}
int main()
{int R,S;scanf("%d",&R);while(R!=-1){ BTNode* r=findroot(R);scanf("%d",&S);     while(S!=-1){if(S<100)GateCount++;Insert(S,r);scanf("%d",&S);}scanf("%d",&R);}int gate,num;for(int i=0;i<GateCount;i++){scanf("%d %d",&gate,&num);BTNode* Gate=find(gate,root);Gate->passenger=num;}Adjust(root);
}
BTNode* find(int n,BTNode* p)
{if(p==NULL)return NULL;if(p->id==n)return p;BTNode* tar=NULL;tar=find(n,p->left);if(tar==NULL)tar=find(n,p->mid);if(tar==NULL)tar=find(n,p->right);return tar;
}
BTNode* findroot(int r)
{if(root==NULL){root=(BTNode*)malloc(sizeof(BTNode));root->id=r;root->passenger=0;root->left=root->right=root->mid=NULL;return root;}return find(r,root);   
}
void Insert(int s,BTNode* r)
{BTNode* new=(BTNode*)malloc(sizeof(BTNode));new->id=s;new->passenger=0;new->left=new->mid=new->right=NULL;if(r->left==NULL){r->left=new;return;}if(r->left!=NULL&&r->mid==NULL){r->mid=new;return;}    if(r->left!=NULL&r->mid!=NULL&&r->right==NULL){r->right=new;return;}
}
void Adjust(BTNode* root)
{BTNode* queue[MAX];BTNode* Gates[GateCount];int index=0;int Front=0,Rear=MAX-1,Count=0;Rear=(Rear+1)%MAX;queue[Rear]=root;Count++;while(Count!=0){BTNode* R=queue[Front];Front=(Front+1)%MAX;Count--;if(R->left==NULL&&R->mid==NULL&&R->right==NULL)Gates[index++]=R;else{if(R->left){Rear=(Rear+1)%MAX;queue[Rear]=R->left;Count++;}if(R->mid){Rear=(Rear+1)%MAX;queue[Rear]=R->mid;Count++;}if(R->right){Rear=(Rear+1)%MAX;queue[Rear]=R->right;Count++;}}}BTNode* Gates_1[GateCount];memcpy(Gates_1,Gates,sizeof(BTNode*)*GateCount);qsort(Gates_1,GateCount,sizeof(BTNode*),cmp1);for(int i=0;i<GateCount;i++){int num=1;int start=i;while(i+1<GateCount&&Gates_1[i]->passenger==Gates_1[i+1]->passenger){i++;num++;}if(num>1){qsort(Gates_1+start,num,sizeof(BTNode*),cmp2);}}for(int i=0;i<GateCount;i++){printf("%d->%d\n",Gates_1[i]->id,Gates[i]->id);}
}

这个题我觉得非常好,考点非常全面,考到了树的构造,树的遍历,查找指定节点,层序遍历,还有在快排中怎样以两个关键词排序。
最后还有一个小小的点需要注意一下:每个分支节点有三个指针,这三个指针可能都指向分支节点,也可能都指向登机口节点(图上没有表示,图上最多只有两个)。因此在插入树节点

词频统计(树实现)

【问题描述】

编写程序统计一个英文文本文件中每个单词的出现次数(词频统计),并将统计结果按单词字典序输出到屏幕上。

要求:程序应用二叉排序树(BST)来存储和统计读入的单词。

注:在此单词为仅由字母组成的字符序列。包含大写字母的单词应将大写字母转换为小写字母后统计。在生成二叉排序树不做平衡处理。

【输入形式】

打开当前目录下文件article.txt,从中读取英文单词进行词频统计。

【输出形式】

程序应首先输出二叉排序树中根节点、根节点的右节点及根节点的右节点的右节点上的单词(即root、root->right、root->right->right节点上的单词),单词中间有一个空格分隔,最后一个单词后没有空格,直接为回车(若单词个数不足三个,则按实际数目输出)。

程序将单词统计结果按单词字典序输出到屏幕上,每行输出一个单词及其出现次数,单词和其出现次数间由一个空格分隔,出现次数后无空格,直接为回车。

【样例输入】

当前目录下文件article.txt内容如下:

"Do not take to heart every thing you hear."she says.(这个she says是我自己加的

“Do not spend all that you have.”

"Do not sleep as long as you want;"who(也是我加的

【样例输出】

do not take

all 1

as 2

do 3

every 1

have 1

hear 1

heart 1

long 1

not 3

sleep 1

spend 1

take 1

that 1

thing 1

to 1

want 1

you 3

【样例说明】

程序首先在屏幕上输出程序中二叉排序树上根节点、根节点的右子节点及根节点的右子节点的右子节点上的单词,分别为do not take,然后按单词字典序依次输出单词及其出现次数。

【评分标准】

通过全部测试点得满分


为什么我要加一个she says呢?因为hear."she这一串中没有空格,如果你要用fscanf读的话,这个就被识别为一个单词了,但是很明显,这是两个独立的单词,hear和she,因此需要巧妙地处理一下:

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<ctype.h>
typedef struct node
{char word[50];int num;struct node* left;struct node* right;
}BTNode;
BTNode* root;
void Insert(char*);
void Inorder(BTNode*);
int main()
{FILE* fp=fopen("article.txt","r");//------------------------------------------------//这部分用于单词的正确读写int ch;char str[50];int index=0;while((ch=fgetc(fp))!=EOF){ch=tolower(ch);if(ch>='a'&&ch<='z')str[index++]=ch;else{if(index>0){str[index]='\0';Insert(str);index=0;}} }//这个判断很重要,//因为如果最后一个单词后面没有标点,直接是EOF,//那么最后一个单词就不正确插入树中,//这也是为什么我在最后加了一个who的原因,用于测试这一部分。if(index>0){str[index]='\0';Insert(str);}//-------------------------------------------------if(root!=NULL){printf("%s ",root->word);}if(root->right!=NULL){printf("%s ",root->right->word);}if(root->right->right!=NULL){printf("%s",root->right->right->word);}printf("\n");Inorder(root);return 0;
}
void Insert(char* s)
{if(root==NULL){root=(BTNode*)malloc(sizeof(BTNode));strcpy(root->word,s);root->num=1;root->left=root->right=NULL;return;}BTNode* cur=root;while(1){int cmp=strcmp(s,cur->word);if(cmp==0){cur->num++;break;}else if(cmp>0){if(cur->right==NULL){BTNode* new=(BTNode*)malloc(sizeof(BTNode));strcpy(new->word,s);new->num=1;new->left=new->right=NULL;cur->right=new;break;}elsecur=cur->right;}else{if(cur->left==NULL){BTNode* new=(BTNode*)malloc(sizeof(BTNode));strcpy(new->word,s);new->num=1;new->left=new->right=NULL;cur->left=new;break;}elsecur=cur->left;}}
}
void Inorder(BTNode* p)
{if(p==NULL)return;Inorder(p->left);printf("%s %d\n",p->word,p->num);Inorder(p->right);
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CTFHUB-SQL注入-报错注入

目录 报错注入概述 报错注入的原理 报错注入的步骤 报错注入的常用函数 实战案例 结论 方法1&#xff1a;updatexml函数 查看数据库名 查看表名 查看表中数据 方法2&#xff1a;extractvalue函数 查看数据库名 查看数据库中的表名 查看表中字段名 查看表中数据 报…

第2回 从0x7c00到0x90000

将数据段寄存器ds的值变成了0x07c0,方便了之后访问内存时利用这个段基址进行寻址,接下来,我们带着这两行代码继续往下看6行: 此时ds寄存器的值已经是0x07c0了,然后用同样的方式将es寄存器的值变成0x9000,接着又把cs寄存器的值变成256。 好的,此时ds,es,cx寄存器的值,都…

CleanMyMac2024最新免费电脑Mac系统优化工具

大家好&#xff0c;我是你们的好朋友——软件评测专家&#xff0c;同时也是一名技术博主。今天我要给大家种草一个超级实用的Mac优化工具——CleanMyMac&#xff01; 作为一个长期使用macOS的用户&#xff0c;我深知系统运行时间长了&#xff0c;缓存文件、日志、临时文件等都会…

LLVM Cpu0 新后端5 静态重定位 动态重定位

想好好熟悉一下llvm开发一个新后端都要干什么&#xff0c;于是参考了老师的系列文章&#xff1a; LLVM 后端实践笔记 代码在这里&#xff08;还没来得及准备&#xff0c;先用网盘暂存一下&#xff09;&#xff1a; 链接: https://pan.baidu.com/s/1yLAtXs9XwtyEzYSlDCSlqw?…

每日一题——Python实现PAT乙级1019 数字黑洞(举一反三+思想解读+逐步优化)

一个认为一切根源都是“自己不够强”的INTJ 个人主页&#xff1a;用哲学编程-CSDN博客专栏&#xff1a;每日一题——举一反三Python编程学习Python内置函数 Python-3.12.0文档解读 目录 我的写法 点评代码的优缺点&#xff1a; 时间复杂度&#xff1a; 空间复杂度&#…

【类型商店】字符字符串(下)

啊&#xff0c;哈喽&#xff0c;小伙伴们大家好。我是#Y清墨&#xff0c;今天呐&#xff0c;我要介绍的是字符与字符串。 导语 前两期&#xff0c;我们已经懂得了概念&#xff0c;今天来看些函数。 正题 一.增加或连接 &#xff08;1) 后面增加() string s1,s2; //定义 s…

Meta首席AI科学家Yann LeCun指出生成式AI的不足

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

express入门01服务器搭建以及get和post请求的监听

微搭提供了后端API的能力&#xff0c;但是不同的版本收费差别巨大&#xff0c;因为使用的门槛限制了中小企业使用低代码平台。那可不可以既要又要呢&#xff1f;答案是肯定的&#xff0c;那其实掌握一定的后端框架&#xff0c;借助我们在低代码中已经熟练掌握的技能其实是比较容…

OpenCV学习(4.9) OpenCV中的轮廓

1.目标 了解轮廓是什么。学习寻找轮廓&#xff0c;绘制轮廓等您将看到以下功能&#xff1a;**cv.findContours()** &#xff0c;**cv.drawContours()* 2.什么是轮廓 轮廓可以简单地解释为连接具有相同颜色或强度的所有连续点(沿边界)的曲线。轮廓是用于形状分析以及对象检测…

友情提示:lazarus的tsortgrid.autofillcolumns存在BUG

直接在tsortgrid的属性中设置autofillcolumns为true&#xff0c;会提示&#xff1a;123个错误。即使修改为false&#xff0c;编译运行照样会出现上述错误。唯一解决的办法就是删除sortgrid重新添加一个。 代码设置SortGrid1.AutoFillColumns : TRUE不受影响。

【Windows】UWP - Application Frame 窗口句柄溯源

目录 一、问题描述 二、解决方案 三、测试代码 参考文献 本文出处链接&#xff1a;[https://blog.csdn.net/qq_59075481/article/details/139574981]。 一、问题描述 当 GUI 线程的窗口属于 Windows/UWP 应用程序时&#xff0c;它们始终由进程 ApplicationFrameHost 托管…

量化投资分析平台 迅投 QMT(六)资产定价绕不过去的BSM模型

量化投资分析平台 迅投 QMT [迅投 QMT](https://www.xuntou.net/?user_code7NYs7O)我目前在使用什么是BSM模型CQF课程介绍模型的五个重要的假设模型公式 我们为啥要学&#xff08;知道&#xff09;这玩意儿呢&#xff1f;隐含波动率&#xff08;Implied Volatility&#xff09…

初阶 《函数》 4. 函数的调用

4. 函数的调用 4.1 传值调用 函数的形参和实参分别占有不同内存块&#xff0c;对形参的修改不会影响实参 4.2 传址调用 传址调用是把函数外部创建变量的内存地址传递给函数参数的一种调用函数的方式 这种传参方式可以让函数和函数外边的变量建立起真正的联系&#xff0c;也就是…

堆和栈(heap and stack)

1、堆&#xff1a;一块内存空间&#xff0c;可以从中分配一个小buffer&#xff0c;用完后再把它放回去。 2、栈&#xff1a;也是一块内存空间&#xff0c;cpu的sp寄存器指向它&#xff0c;它可以用于函数调用、局部变量、多任务系统里保存现场。 PUSH [r3-r6,lr]; #将r3到r6寄…

26.多边形的判定

上海市计算机学会竞赛平台 | YACSYACS 是由上海市计算机学会于2019年发起的活动,旨在激发青少年对学习人工智能与算法设计的热情与兴趣,提升青少年科学素养,引导青少年投身创新发现和科研实践活动。https://www.iai.sh.cn/problem/499 题目描述 给定 𝑛n 个整数 𝑎1,𝑎…

Nacos注册中心和配置中心

1 nacos简介 1.1nacos介绍 Nacos是阿里的一个开源产品&#xff0c;它是针对微服务架构中的服务发现、配置管理、服务治理的综合型解决方案。是微服务的注册中心和配置中心&#xff0c;相当于springcloudEureka和springconfig的集合。 Nacos 致力于帮助您发现、配置和管理微服务…

使用Leaflet-canvas-label进行个性化标注实践详解

目录 前言 一、leaflet-canvas-label属性 1、地图展示属性 2、Canvas文本标注属性 3、事件列表 二、属性设置实战 1、标注放大比例 2、字体颜色和方向偏移 3、标注文字透明色设置 4、标注显示层级 三、事件绑定 1、颜色改变 2、事件绑定解析 3、标记初始化的一个小…

28.找零

上海市计算机学会竞赛平台 | YACSYACS 是由上海市计算机学会于2019年发起的活动,旨在激发青少年对学习人工智能与算法设计的热情与兴趣,提升青少年科学素养,引导青少年投身创新发现和科研实践活动。https://www.iai.sh.cn/problem/744 题目描述 有一台自动售票机,每张票卖 …

一文详解大模型微调全流程

节前&#xff0c;我们星球组织了一场算法岗技术&面试讨论会&#xff0c;邀请了一些互联网大厂朋友、参加社招和校招面试的同学. 针对算法岗技术趋势、大模型落地项目经验分享、新手如何入门算法岗、该如何准备、面试常考点分享等热门话题进行了深入的讨论。 汇总合集&…

【大学物理】波动光学:光的衍射

23.2 单缝的夫琅禾费衍射_哔哩哔哩_bilibili 1 光的衍射和惠更斯-菲涅尔原理 干涉vs衍射&#xff1a;干涉研究的是两个分立的子光源&#xff0c;衍射研究的是连续的子光源。 两位科学家用分解的思想&#xff0c;一个解决了方向一个解决了光强。 2 单缝的夫琅禾费衍射 夫琅禾…