【2025小白版】计算复试/保研机试模板(个人总结非GPT生成)附代码
一、编程语言选择
很多高校在机试中对编程语言都有明确规定,像复旦大学计算机学院就说明可选择 C、C++ 或 Java 语言答题,还支持 C11(gcc5.4),C++14(g++5.4),Java (openjdk1.8)等编译环境。这里强烈建议大家使用 C/C++,因为几乎所有高校都支持,通用性超强👍。
二、准备好模板是至关重要的
一般来说,机试都可以带书和纸质资料进入考场。所以提前把那些函数的用法和算法的模板准备好是很重要的,一方面是增加自己的信心,万一没记住还可以翻开来看一下。另外说不定考到原题或者类似的题,就可以直接秒杀了。
机试模板PDF详细代码自取
常见头文件
#include <iostream>
#include <algorithm>
#include <vector>
#include <string>
#include <cmath>
cout << abs(a);
memset(a,-1,sizeof(a)); #include <string.h>
int转字符串
string intToString(long long x){string s;while(x){s += (x % 10) + '0';x = x / 10;} reverse(s.begin(),s.end());return s;
}
日期模板
int daytab[2][13] = {
{0,31,28,31,30,31,30,31,31,30,31,30,31
},
{0,31,29,31,30,31,30,31,31,30,31,30,31,
}
};bool IsLeapYear(int x){return (x % 4 == 0&& x % 100 != 0) || (x % 400 ==0);
}
=====================================================算天数while(cin >> y >> m >> d){int sum = 0;for(int i = 0;i < m ;i ++){sum += daytab[isLeapYear(y)][i];}sum += d;cout << sum << endl;}
======================================================scanf("%04d%02d%02d",&y1,&m1,&d1);
======================================================
// 第n天后是什么日期cin >> y >> m >> d >> n;n = n + d;d = 0;while(n >= daytab[IsLeapYear(y)][m]){n -= daytab[IsLeapYear(y)][m];if(m == 12){y ++;m = 1;}else{m ++;}}d = d + n;if(d == 0 && m != 1){m --;d = daytab[IsLeapYear(y)][m];}else if(d == 0 && m == 1){m = 12;d = daytab[IsLeapYear(y)][m];}printf("%04d-%02d-%02d\n",y,m,d);}
二分查找(在已经有序的情况下)
bool BinarySearch(int n,int x){int l = 0,r = n - 1;while(l <= r){int m = (r + l) / 2;if(a[m] < x){l = m + 1;}else if(a[m] > x){r = m - 1;}else{return true;}}return false;
}
sort排序,重写CMP函数
bool cmp(Student x,Student y){if(x.score == y.score){return x.num < y.num; }else{return x.score < y.score;}
} stable_sort(&stu[0],&stu[n],cmp); //重点:sort是不稳定排序,stable_sort才是稳定排序
快速排序
void quick_sort(int q[],int l,int r){if(l >= r)return ;int x = q[(l + r) >> 1], i = l - 1,j = r + 1;while(i < j){do i ++;while(q[i] < x);do j --;while(q[j] > x);if(i < j)swap(q[i],q[j]);} quick_sort(q,l,j);quick_sort(q,j + 1,r);
}
归并排序 + 逆序数对
void merge_sort(int q[],int l,int r){if(l >= r)return ;int mid = (l + r) >> 1;merge_sort(q,l,mid);merge_sort(q,mid + 1,r);int i = l ,j = mid + 1,k = 0;// 左右指针进行比较 while(i <= mid && j <= r){if(q[i] < q[j])temp[k ++] = q[i ++];else temp[k ++] = q[j ++];}// 没有分完的 while(i <= mid)temp[k ++] = q[i ++];while(j <= r)temp[k ++] = q[j ++];for(int i = l,j = 0;i <= r;i ++,j ++)q[i] = temp[j];
}
============================================================
逆序数
while(i <= mid && j <= r){if(q[i] > q[j]){temp[k ++] = q[j ++];sum += mid - i + 1;}else temp[k ++] = q[i ++];}
cout << sum << endl;
字符串处理
int index = str.find('a');string newstr = str.substr(startIndex,count);
向量vector map queue stack
vector<int> vectore;vectore.push_back('i');
vectore.pop_back();for(int i = 0;i < vectore.size();i ++)// map自带对键排序,进行迭代
map<int,string>::iterator it;
for(it = str.begin();it != str.end();it ++){cout << it->second << endl;
}queue<Animal> cats;
dogs.front().numberstack<int> s;
s.push(i);
s.pop();
s.top();
s.empty();
最大公约数、最小公倍数
int gcd(int a,int b){return b ? gcd(b,a % b):a;
}// 最小公倍数
min = (a * b) / gcd;
最长子序列和问题 + 最长公共序列
for(int i=1;i<n;i++){a[i]=max(a[i],a[i-1]+a[i]);answer=max(answer,a[i]);}cout<<answer<<endl;for (int i = 1; i <= a.size(); i++) {for (int j = 1; j <= b.size(); j++) {if (a[i - 1] == b[j - 1]) {dp[i][j] = dp[i - 1][j - 1] + 1;}else {dp[i][j] = max(dp[i - 1][j], dp[i][j - 1]);}}
}
背包问题
const int N = 1010;
int n,m;//物品数量和背包容积
int v[N],w[N];
int f[N];int main(){cin >> n >> m;for(int i = 1;i <= n;i ++){cin >> v[i] >> w[i];}for(int i = 1;i <= n;i ++){for(int j = m;j >= v[i];j --){//2种情况f[j] = max(f[j],f[j - v[i]] + w[i]);//背包有空间}}cout << f[m] << endl;return 0;
}
// 完全
for(int i = 1;i <= n;i ++){for(int j = v[i];j <= m;j ++){f[j] = max(f[j],f[j - v[i]] + w[i]);}}
进制转化
======================================================================================数比较小
void convert(int n,int b){while(n){a[cnt ++] = n % b;n = n / b;}
}cin >> n >> b;convert(n,b);for(int i = cnt - 1;i >= 0;i --)cout << a[i];
=====================================================================================高精度:s原字符串,m是原进制,b是转换后的进制
string convert(string s, int m, int b) {string ans; while (!s.empty()) {int k = 0; // 余数bool leadingZero = true; // 用于去除前导零string temp;for (int i = 0; i < s.size(); i++) {// 如果是字母字符(用于大于10的进制),则转换为对应的值,如'A' -> 10, 'B' -> 11int digit = (isdigit(s[i]) ? s[i] - '0' : s[i] - 'A' + 10);int t = (k * m + digit) % b;int quotient = (k * m + digit) / b;k = t;if (quotient != 0 || !leadingZero) {temp += (quotient < 10 ? quotient + '0' : quotient - 10 + 'A');leadingZero = false;}}ans += (k < 10 ? k + '0' : k - 10 + 'A');s = temp;}reverse(ans.begin(), ans.end());return ans.empty() ? "0" : ans;
}
====================================================================================16进制到10进制
int CharToInt(char c){if(c >= '0' && c <= '9') return c - '0';else return c - 'A' + 10;
}
int main() {string str;while (cin >> str) {int x = 0;for(int i = 2; i < str.length(); i ++){x = x * 16 + CharToInt(str[i]);}cout << x << endl;}return 0;
}
单词替换(字符串)
getline(cin,s);cin >> a >> b;for(int i = 0;i < s.size();i ++){int j = i;string word;// s[j]不为空格时把他加到单词序列中,相当于split while(j < s.size() && s[j] != ' ')word += s[j ++];i = j;if(word == a)cout << b << ' ';else cout << word << ' ';}
结构体应用
// 定义一个结构体 `point`,用来存储字符的相关信息
struct point {int num; // 记录字符在字符串中出现的次数vector<int> AA; // 记录字符在字符串中出现的位置(索引)bool flag = false; // 用来判断是不是该字符第一次被输出
};int main() {string s; // 用来存储输入的字符串map<char, point> mapp; // 定义一个映射,用来存储每个字符及其对应的 `point` 结构体while (cin >> s) { // 逐行读取输入的字符串// 第一次遍历字符串,统计每个字符的出现次数for (int i = 0; i < s.size(); i++) {mapp[s[i]].num++;}// 第二次遍历字符串,记录每个字符的出现位置(如果出现次数大于1)for (int i = 0; i < s.size(); i++) {if (mapp[s[i]].num > 1) {mapp[s[i]].AA.push_back(i);}}// 第三次遍历字符串,输出每个出现次数大于1且还未被输出的字符及其出现的位置for (int i = 0; i < s.size(); i++) {if (mapp[s[i]].num > 1 && mapp[s[i]].flag == false) {for (int j = 0; j < mapp[s[i]].AA.size(); j++) {if (j == 0)printf("%c:%d", s[i], mapp[s[i]].AA[j]);elseprintf(",%c:%d", s[i], mapp[s[i]].AA[j]);}cout << endl;mapp[s[i]].flag = true; // 标记该字符已被输出}}}return 0;
}
约瑟夫环问题
int main() {int n, p, m; // n多少人,p从哪里开始,m经过多少人淘汰 while (cin >> n >> p >> m && (n || p || m)) {queue<int> children;for (int i = 1; i <= n; ++i) {children.push(i);}// 将队列旋转到第p个小孩开始for (int i = 1; i < p; ++i) {children.push(children.front());children.pop();}while (!children.empty()) {// 报数到第m个for (int i = 1; i < m; ++i) {children.push(children.front());children.pop();}// 输出当前出圈的小孩编号cout << children.front();children.pop();if (!children.empty()) {cout << ",";}}cout << endl;}return 0;
}
素数
bool isPrime(int n)
{if(n == 1 || n == 0 || n < 0)return false; for(int i = 2; i <= sqrt(n); i++) {if(n % i ==0)return false;}return true;
}埃氏筛法
const int maxn = 10000000;
int prime[maxn];
bool IsPrime[maxn] = {0};//0代表都是素数
void Find_Prime(){IsPrime[1] = 1;//1不是素数int pNum = 1;for(int i = 2; i <= maxn; i++){if(!IsPrime[i])prime[pNum++] = i;for(int j = i * i; j <= maxn; j += i){IsPrime[j] = true;}}
}printf("%d\n", prime[k]);
质因数+约数
int ret = 0;// 从 2 开始尝试每个可能的因数,直到 sqrt(n)for (int i = 2; i <= sqrt(n); i++) {// 如果 i 是 n 的一个因数while (n % i == 0) {ret++; // 计数器加一n /= i; // 用 i 除去 n 的这个因数}// 如果 n 已经被完全分解,提前退出循环if (n <= 1) break;}// 如果存在大于 sqrt(n) 的质因数,则它只能是 n 本身if (n > 1) ret++;return ret;
约数
int Counter(int x){int count = 0; int i = 1;for(i = 1;i * i < x;i ++){if(x % i == 0)count += 2;}if(i * i == x) count ++;return count;
}
快速幂
typedef long long LL;
LL a,n;LL ksm(LL a, LL n){LL ans = 1;while(n){if(n & 1)ans *= a;//如果n的最后一位是1 a *= a;n >>= 1; //二进制去掉最后一个1,*2 }return ans;
} int main(){cin >> a >> n;cout << ksm(a,n);
高精度加减乘除
// C = A + B, A >= 0, B >= 0
vector<int> add(vector<int> &A, vector<int> &B)
{if (A.size() < B.size()) return add(B, A);vector<int> C;int t = 0;for (int i = 0; i < A.size(); i ++ ){t += A[i];if (i < B.size()) t += B[i];C.push_back(t % 10);t /= 10;}if (t) C.push_back(t);return C;
}// C = A - B, 满足A >= B, A >= 0, B >= 0
vector<int> sub(vector<int> &A, vector<int> &B)
{vector<int> C;for (int i = 0, t = 0; i < A.size(); i ++ ){t = A[i] - t;if (i < B.size()) t -= B[i];C.push_back((t + 10) % 10);if (t < 0) t = 1;else t = 0;}while (C.size() > 1 && C.back() == 0) C.pop_back();return C;
}// C = A * b, A >= 0, b >= 0
vector<int> mul(vector<int> &A, int b)
{vector<int> C;int t = 0;for (int i = 0; i < A.size() || t; i ++ ){if (i < A.size()) t += A[i] * b;C.push_back(t % 10);t /= 10;}while (C.size() > 1 && C.back() == 0) C.pop_back();return C;
}// A / b = C ... r, A >= 0, b > 0
vector<int> div(vector<int> &A, int b, int &r)
{vector<int> C;r = 0;for (int i = A.size() - 1; i >= 0; i -- ){r = r * 10 + A[i];C.push_back(r / b);r %= b;}reverse(C.begin(), C.end());while (C.size() > 1 && C.back() == 0) C.pop_back();return C;
}
KMP
// s[]是长文本,p[]是模式串,n是s的长度,m是p的长度
求模式串的Next数组:
for (int i = 2, j = 0; i <= m; i ++ )
{while (j && p[i] != p[j + 1]) j = ne[j];if (p[i] == p[j + 1]) j ++ ;ne[i] = j;
}// 匹配
for (int i = 1, j = 0; i <= n; i ++ )
{while (j && s[i] != p[j + 1]) j = ne[j];if (s[i] == p[j + 1]) j ++ ;if (j == m){j = ne[j];// 匹配成功后的逻辑}
}
BFS走迷宫
#include <iostream>
#include <queue>#define x first
#define y secondusing namespace std;typedef pair<int,int> PII;const int N = 1e3 + 10;int n,m;
int g[N][N];
int d[N][N];
int dx[4] = {1,-1,0,0},dy[4] = {0,0,1,-1};void bfs(int u){queue<int> q;q.push({1,1});memset(d,-1,sizeof(d));d[1][1] = 0;while(q.size()){PII t = q.front();q.pop();for(int i = 0;i < 4;i ++){int a = t.x +dx[i];int b = dy[i] + t.y;if(a < 1 || a > n || b < 1 || b > m)continue;if(g[a][b] == 1)continue;if(d[a][b] != -1)continue;d[a][b] = d[t.x][t.y] + 1;q.push({a,b});}}
}int main(){cin >> n >> m;for(int i = 0;i < n;i ++){for(int j = 0;j < n;j ++){cin >> g[i][j];}}bfs();cout << d[n][m] << endl;return 0;
}
N皇后问题DFS
#include <iostream>using namespace std;const int N = 20; // 对角线元素2n-1取20防止越界
int n;
char g[N][N]; // 存储图
bool col[N],dg[N],udg[N]; // udg副对角线 diagonal
int cnt;void dfs(int x){if(x == n){ // 如果找到方案的话 for(int i = 0;i < n;i ++){puts(g[i]); // puts输出二维数组 输出每一行就会自动换行}puts("");cnt ++;return; // 返回调用函数进行执行 }// x : 行 y : 列for(int y = 0;y < n;y ++){// 按行枚举 因为每一行都需要放皇后 相当于剪枝 // 判断皇后是否放在这格if(!col[y] && !dg[x + y] && !udg[y - x + n]){g[x][y] = 'Q';col[y] = dg[x + y] = udg[y - x + n] = true;dfs(x + 1); // 找下一行// 回溯的时候恢复现场col[y] = dg[x + y] = udg[y - x + n] = false;g[x][y] = '.'; } }
}
int main(){cin >> n;for(int i = 0;i < n;i ++){for(int j =0;j < n;j ++){g[i][j] = '.';}} dfs(0); // 从第一行开始找[0:下标] return 0;
}
链表类型
链表反转
class Solution {
public:ListNode* reverseList(ListNode* head) {ListNode *cur = head, *pre = nullptr;while(cur != nullptr) {ListNode* tmp = cur->next; // 暂存后继节点 cur.nextcur->next = pre; // 修改 next 引用指向pre = cur; // pre 暂存 curcur = tmp; // cur 访问下一节点}return pre;}
};
回文链表
class Solution {
public:bool isPalindrome(ListNode* head) {vector<int> vals;while (head != nullptr) {vals.emplace_back(head->val);head = head->next;}for (int i = 0, j = (int)vals.size() - 1; i < j; ++i, --j) {if (vals[i] != vals[j]) {return false;}}return true;}
};
环形链表
public class Solution {public boolean hasCycle(ListNode head) {Set<ListNode> seen = new HashSet<ListNode>();while (head != null) {if (!seen.add(head)) {return true;}head = head.next;}return false;}
}
排序链表
class Solution {
public:ListNode* sortList(ListNode* head) { return mergeSort(head);}/*** 对给定的链表进行归并排序*/ListNode* mergeSort(ListNode* head){// 如果链表为空或只有一个节点,无需排序直接返回if(!head || !head->next){return head; }// 获取链表的中间节点,分别对左右子链表进行排序ListNode* mid = getMid(head);ListNode* rightSorted = mergeSort(mid->next); // 排序右子链表if(mid)mid->next = nullptr; // 断开两段子链表ListNode* leftSorted = mergeSort(head); // 排序左子链表return mergeTwoLists(leftSorted, rightSorted); // 两个子链表必然有序,合并两个有序的链表}/*** 获取以head为头节点的链表中间节点* 如果链表长度为奇数,返回最中间的那个节点* 如果链表长度为偶数,返回中间靠左的那个节点*/ListNode* getMid(ListNode* head){if(!head)return head; ListNode* slow = head, *fast = head->next; // 快慢指针,慢指针初始为while(fast != nullptr && fast->next != nullptr) {fast = fast->next->next; // 快指针每次移动两个节点slow = slow->next; // 慢指针每次移动一个节点}return slow; // 快指针到达链表尾部时,慢指针即指向中间节点}/*** 合并两个有序链表list1和list2*/ListNode* mergeTwoLists(ListNode* list1, ListNode* list2) {ListNode* dummy = new ListNode(); // 伪头节点,用于定位合并链表的头节点ListNode* node = dummy; // 新链表当前的最后一个节点,初始为伪头节点// 直到两个链表都遍历完了,合并结束while(list1 != nullptr || list2 != nullptr){int val1 = list1 == nullptr ? 50001 : list1 -> val; // 如果链表1已经遍历完,val1取最大值,保证链表2的节点被选择到 int val2 = list2 == nullptr ? 50001 : list2 -> val; // 如果链表2已经遍历完,val2取最大值,保证链表1的节点被选择到 if(val1 < val2){// 链表1的节点值更小,加入到合并链表,并更新链表1指向的节点node -> next = list1;list1 = list1 -> next;}else{// 链表2的节点值更小,加入到合并链表,并更新链表2指向的节点node -> next = list2;list2 = list2 -> next;}node = node -> next; // 更新合并链表当前的最后一个节点指向}return dummy -> next; // 伪头节点的下一个节点即为合并链表的头节点}
};
合并两个有序链表
class Solution {
public:ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {if (l1 == nullptr) {return l2;} else if (l2 == nullptr) {return l1;} else if (l1->val < l2->val) {l1->next = mergeTwoLists(l1->next, l2);return l1;} else {l2->next = mergeTwoLists(l1, l2->next);return l2;}}
};
是否含有子链表
struct Link {int data;struct Link *next;
};
#include <stdio.h>
void subList(Link *a,Link *b) {struct Link *la = a ,*pA = la->next, *pB = b->next;while (pA&&pB) {if (pA->data==pB->data) {//相等继续对比下一个pA = pA->next;pB = pB->next;}else {pB = b->next;//pb从头开始与pa对比la = la->next;//失败一次,la往后移动一个节点pA = la->next;//pa从下一个节点又开始}}pB == NULL ? printf("true") : printf("false");//如果pb为NULL,说明已比对完成
}
int main() {struct Link *a, *b;Link *createLink(int);a = createLink(0);b = createLink(0);subList(a,b);return 0;
}
合并链表
/*有两个循环单链表,链表头指针分别为h1和h2,编写一个函数将链表h2连接到h1之后,要求连接后的链表仍保持循环链表形式。*/struct Link {int data;struct Link *next;};void linkTwoLists(Link *h1,Link *h2) {struct Link *p1 = h1->next, *p2 = h2->next;while (p1->next != h1) p1 = p1->next;//这里要去判断p1->next是否等于h1,进而判断出是否到达尾结点p1->next = p2;while (p2->next != h2) p2 = p2->next;p2->next = h1;free(h2);//释放h2}int main() {struct Link *h1, *h2,*p;Link *createSinLoopLink();h1 = createSinLoopLink();h2 = createSinLoopLink();linkTwoLists(h1,h2);p = h1->next;while (p!=h1) {printf("%d ",p->data);p = p->next;}return 0;}
输出链表倒数第K个结点
ListNode *findKthTail(ListNode *pHead, int K) {ListNode *p1(pHead), *p2(pHead);for(int i=0; i<K; ++i){p1 = p1-> next;if(!p1){return nullptr;}}while(p1){p1 = p1-> next;p2 = p2-> next;}return p2;
}
两数相加
/*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode(int x) : val(x), next(NULL) {}* };*/
class Solution {
public:ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {ListNode* first = new ListNode(0); // 哑结点ListNode* last = first;int carry = 0;while(l1 or l2 or carry){// 相加int bitsum = 0;if(l1){bitsum += l1->val;l1 = l1->next;}if(l2){bitsum += l2->val;l2 = l2->next;}if(carry){bitsum += carry;}// 结果int digit = bitsum % 10;carry = bitsum / 10;// 链表存储ListNode* node = new ListNode(digit);last->next = node;last = node;}last = first->next;delete first;return last;}
};
计算循环链表中环的长度
int getLoopLength(ListNode *pHead) {ListNode *fast(pHead), *slow(pHead);while (fast && fast->next) {fast = fast->next->next;slow = slow->next;if (fast == slow) {break;}}if (!fast || !fast->next) return -1;int length = 1; // 从1开始while (slow->next != fast) {slow = slow->next;length++;}return length;
}
先序遍历
void preorder(TreeNode *root, vector<int> &res) {if (root == nullptr) {return;}res.push_back(root->val);preorder(root->left, res);preorder(root->right, res);}vector<int> preorderTraversal(TreeNode *root) {vector<int> res;preorder(root, res);return res;}
层序遍历
vector<vector<int>> levelOrder(TreeNode* root) {vector <vector <int>> ret;if (!root) {return ret;}queue <TreeNode*> q;q.push(root);while (!q.empty()) {int currentLevelSize = q.size();ret.push_back(vector <int> ());for (int i = 1; i <= currentLevelSize; ++i) {auto node = q.front(); q.pop();ret.back().push_back(node->val);if (node->left) q.push(node->left);if (node->right) q.push(node->right);}}return ret;
完全二叉树的节点个数
int countNodes(TreeNode* root) {if(!root)return 0;return countNodes(root -> left) + countNodes(root -> right) + 1;}
每个人戴不同帽子的方案数
using LL = long long;class Solution {
private:static constexpr int mod = 1000000007;public:int numberWays(vector<vector<int>>& hats) {int n = hats.size();// 找到帽子编号的最大值,这样我们只需要求出 $f[maxhatid][2^n - 1]$ 作为答案int maxHatId = 0;for (int i = 0; i < n; ++i) {for (int h: hats[i]) {maxHatId = max(maxHatId, h);}}// 对于每一顶帽子 h,hatToPerson[h] 中存储了喜欢这顶帽子的所有人,方便进行动态规划vector<vector<int>> hatToPerson(maxHatId + 1);for (int i = 0; i < n; ++i) {for (int h: hats[i]) {hatToPerson[h].push_back(i);}}vector<vector<int>> f(maxHatId + 1, vector<int>(1 << n));// 边界条件f[0][0] = 1;for (int i = 1; i <= maxHatId; ++i) {for (int mask = 0; mask < (1 << n); ++mask) {f[i][mask] = f[i - 1][mask];for (int j: hatToPerson[i]) {if (mask & (1 << j)) {f[i][mask] += f[i - 1][mask ^ (1 << j)];f[i][mask] %= mod;}}}}return f[maxHatId][(1 << n) - 1];}
};
同构字符串
bool isIsomorphic(string s, string t) {if(s.size() != t.size())return false;unordered_map<char,char> s1;unordered_map<char,char> s2;for(int i = 0;i < s.size();i ++){char x = s[i],y = t[i];if((s1.count(x) && s1[x] != y) || (s2.count(y) && s2[y] != x))return false;s1[x] = y;s2[y] = x;}return true;}
因篇幅受限,如需查看完整版内容,请点击“上述的link”.
相关文章:

【2025小白版】计算复试/保研机试模板(个人总结非GPT生成)附代码
一、编程语言选择 很多高校在机试中对编程语言都有明确规定,像复旦大学计算机学院就说明可选择 C、C 或 Java 语言答题,还支持 C11(gcc5.4),C14(g5.4),Java (openjdk1.8)…...

android11使用gpio口控制led状态灯
目录 一、简介 二、解决方法 A、底层驱动 B、上层调用 C、验证 一、简介 1、需求:这里是用2个gpio口来控制LED灯,开机时默认亮蓝灯,按开机键,休眠亮红灯,唤醒亮蓝灯。 原理图: 这里由于主板上电阻R63…...

基于Asp.net的高校一卡通管理系统
作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏:…...

C++蓝桥杯基础篇(七)
片头 嗨~小伙伴们,大家好!今天我们来一起学习蓝桥杯基础篇(七),学习相关字符串的知识,准备好了吗?咱们开始咯! 一、字符与整数的联系——ASCII码 每个常用字符都对应一个-128~127的…...

8.路由原理专题
路由器数据转发原理,路由表、FIB、快速转发表的关系 路由的控制平面与转发平面 控制平面:负责路由计算,维护;路由协议运行在控制平面 转发平面:进行数据包的封装,报文转发,路由表,FIB表,快速转发表等 控制平面与转发平面相互独立又协同工作 路由器检查数据包的目…...
jQuery UI 简介
jQuery UI 简介 引言 随着互联网技术的飞速发展,前端开发已经成为网站和应用程序建设的重要组成部分。jQuery UI 是一个基于 jQuery 的用户界面库,它为开发者提供了丰富的交互组件和视觉效果,使得创建具有吸引力和互动性的网页变得更加简单。本文将为您详细介绍 jQuery UI…...

Web服务器配置
配置虚拟主机 通过虚拟主机,可以实现用自定义的域名来访问,并且可以为不同的域名指定不同的站点目录。 配置IP地址和域名的映射关系 申请真实的域名需要一定的费用,为了方便开发,可以通过修改hosts文件来实现将任意域名解析到本…...

LINUX网络基础 [一] - 初识网络,理解网络协议
目录 前言 一. 计算机网络背景 1.1 发展历程 1.1.1 独立模式 1.1.2 网络互联 1.1.3 局域网LAN 1.1.4 广域网WAN 1.2 总结 二. "协议" 2.1 什么是协议 2.2 网络协议的理解 2.3 网络协议的分层结构 三. OSI七层模型(理论标准) …...
定制化开发的WooCommerce独立站商城更安全
定制化开发的WooCommerce独立站商城在安全性、交易风险控制以及整体用户体验方面有显著优势。以下是定制化开发在这些方面的具体表现: 1. 安全性更高 定制化开发允许开发者从底层架构开始设计和优化,确保网站的安全性。以下是具体表现: (1…...
Xcode 运行真机失败
错误提示: iPhone xxx is not available because it is unpaired. Pair with the device in the Xcode Devices Window, and respond to any pairing prompts on the device. 处理方法: 把Xcode关闭,手机断开数据线,打开终端&…...

【FFmpeg之如何新增一个硬件解码器】
FFmpeg之如何新增一个硬件解码器 前言一、config配置二、解码器定义1.目录结构2.数据结构 三、解码流程1、初始化mediacodec_decode_init2、帧接收mediacodec_receive_frame2.1 解码上下文MediaCodecH264DecContext2.2 发包AVPacket到解码器 -- ff_mediacodec_dec_send2.3 接收…...

P3385 【模板】负环
P3385 【模板】负环 - 洛谷 题目描述 给定一个 n 个点的有向图,请求出图中是否存在从顶点 1 出发能到达的负环。 负环的定义是:一条边权之和为负数的回路。 输入格式 本题单测试点有多组测试数据。 输入的第一行是一个整数 T,表示测试数…...

破解透明物体抓取难题,地瓜机器人CASIA 推出几何和语义融合的单目抓取方案|ICRA 2025
概述 近日,全球机器人领域顶会ICRA 2025(IEEE机器人与自动化国际会议)公布论文录用结果,地瓜机器人主导研发的DOSOD开放词汇目标检测算法与MODEST单目透明物体抓取算法成功入选。前者通过动态语义理解框架提升复杂场景识别准确率…...

深度学习编译器(整理某survey)
一、深度学习框架 TensorFlow PyTorch MXNet ONNX:定义了一个统一的表示,DL models的格式方便不同框架之间的转换模型 二、深度学习硬件 通用硬件(CPU、GPU):通过硬件和软件优化支持深度学习工作负载 GPU:通过多核架构实现高…...

【计算机网络入门】应用层
目录 1.网络应用模型 1.1 C/S模型(客户端服务器模型) 1.2 P2P模型(对等模型) 2. DNS系统 2.1 域名 2.2 域名解析流程 3. FTP文件传输协议 4. 电子邮件系统 4.1 SMTP协议 4.2 pop3协议 4.3 IMAP协议 4.4 基于万维网的电…...

@PostConstruct注解的作用
PostConstruct 注解功能是在一个类的所有依赖被注入完成后,才会被执行的方法。这种方法通常用于类的初始化,初始化过程中可以进行一些资源加载、连接建立、或其他必要的配置工作。PostConstruct 方法仅被调用一次,通常修饰符是public或者prot…...

HTML + CSS 题目
1.说说你对盒子模型的理解? 一、是什么 对一个文档进行布局的时候,浏览器渲染引擎会根据标准之一的css基础盒模型,将所有元素表示为一个个矩形的盒子。 一个盒子由四个部分组成: content,padding,border,margin 下…...

通过多线程获取RV1126的AAC码流
目录 一RV1126多线程获取音频编码AAC码流的流程 1.1AI模块的初始化并使能 1.2AENC模块的初始化 1.3绑定AI模块和AENC模块 1.4多线程获取每一帧AAC码流 1.5每个AAC码流添加ADTSHeader头部 1.6写入具体每一帧AAC的…...

sql sqlserver的进程资源查看,杀掉多余进程
主要是由三个表组成 sys.sysprocesses、sys.dm_exec_sessions、sys.dm_exec_requests 后面两个在2008版本后使用,主要使用sys.dm_exec_sessions SELECT spid AS 会话ID, -- 进程(会话)的ID blocked AS 被阻塞的会话…...
自然语言处理:朴素贝叶斯
介绍 大家好,博主又来和大家分享自然语言处理领域的知识了。按照博主的分享规划,本次分享的核心主题本应是自然语言处理中的文本分类。然而,在对分享内容进行细致梳理时,我察觉到其中包含几个至关重要的知识点,即朴素…...

【OSG学习笔记】Day 18: 碰撞检测与物理交互
物理引擎(Physics Engine) 物理引擎 是一种通过计算机模拟物理规律(如力学、碰撞、重力、流体动力学等)的软件工具或库。 它的核心目标是在虚拟环境中逼真地模拟物体的运动和交互,广泛应用于 游戏开发、动画制作、虚…...

解决Ubuntu22.04 VMware失败的问题 ubuntu入门之二十八
现象1 打开VMware失败 Ubuntu升级之后打开VMware上报需要安装vmmon和vmnet,点击确认后如下提示 最终上报fail 解决方法 内核升级导致,需要在新内核下重新下载编译安装 查看版本 $ vmware -v VMware Workstation 17.5.1 build-23298084$ lsb_release…...
Nginx server_name 配置说明
Nginx 是一个高性能的反向代理和负载均衡服务器,其核心配置之一是 server 块中的 server_name 指令。server_name 决定了 Nginx 如何根据客户端请求的 Host 头匹配对应的虚拟主机(Virtual Host)。 1. 简介 Nginx 使用 server_name 指令来确定…...

Java-41 深入浅出 Spring - 声明式事务的支持 事务配置 XML模式 XML+注解模式
点一下关注吧!!!非常感谢!!持续更新!!! 🚀 AI篇持续更新中!(长期更新) 目前2025年06月05日更新到: AI炼丹日志-28 - Aud…...
【Web 进阶篇】优雅的接口设计:统一响应、全局异常处理与参数校验
系列回顾: 在上一篇中,我们成功地为应用集成了数据库,并使用 Spring Data JPA 实现了基本的 CRUD API。我们的应用现在能“记忆”数据了!但是,如果你仔细审视那些 API,会发现它们还很“粗糙”:有…...

零基础设计模式——行为型模式 - 责任链模式
第四部分:行为型模式 - 责任链模式 (Chain of Responsibility Pattern) 欢迎来到行为型模式的学习!行为型模式关注对象之间的职责分配、算法封装和对象间的交互。我们将学习的第一个行为型模式是责任链模式。 核心思想:使多个对象都有机会处…...

AI,如何重构理解、匹配与决策?
AI 时代,我们如何理解消费? 作者|王彬 封面|Unplash 人们通过信息理解世界。 曾几何时,PC 与移动互联网重塑了人们的购物路径:信息变得唾手可得,商品决策变得高度依赖内容。 但 AI 时代的来…...

基于Java+MySQL实现(GUI)客户管理系统
客户资料管理系统的设计与实现 第一章 需求分析 1.1 需求总体介绍 本项目为了方便维护客户信息为了方便维护客户信息,对客户进行统一管理,可以把所有客户信息录入系统,进行维护和统计功能。可通过文件的方式保存相关录入数据,对…...
Go语言多线程问题
打印零与奇偶数(leetcode 1116) 方法1:使用互斥锁和条件变量 package mainimport ("fmt""sync" )type ZeroEvenOdd struct {n intzeroMutex sync.MutexevenMutex sync.MutexoddMutex sync.Mutexcurrent int…...
探索Selenium:自动化测试的神奇钥匙
目录 一、Selenium 是什么1.1 定义与概念1.2 发展历程1.3 功能概述 二、Selenium 工作原理剖析2.1 架构组成2.2 工作流程2.3 通信机制 三、Selenium 的优势3.1 跨浏览器与平台支持3.2 丰富的语言支持3.3 强大的社区支持 四、Selenium 的应用场景4.1 Web 应用自动化测试4.2 数据…...