日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

C/C++后端学习秘籍

發布時間:2023/12/14 c/c++ 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C/C++后端学习秘籍 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

C/C++后端學習秘籍

文章目錄

  • C/C++后端學習秘籍
  • 前言
  • 一、算法訓練
    • 1.拓撲順序
    • 2.功夫傳人
    • 3.二叉樹中的最低公共祖先
  • 二、工程項目訓練
    • day1.Qt(串口的使用)
  • 三、總結


前言

今天繼續由算法小學徒給大家帶來C/C++后端實習經驗大禮包的第二彈,
(今天的獎品是C++后端學習秘籍膜膜膜膜%%%%),
希望大家喜歡,撒花~~~

一、算法訓練

首先給大家帶來校招程序員考察的核心技能訓練:算法,不管你用什么語言,
數據結構與算法一定是最核心的基本功。說得實際和功利一點,
算法是你進入大廠的敲門磚,還能幫你在工作中快速地彎道超車,
所以一定得搞懂哦~~~
另外現在現在大廠的筆試很多采用ACM模式,面試手撕代碼則多為力扣模式
(核心代碼模式)今天給大家帶來中大廠筆試訓練

1.拓撲順序

這是 2018 年研究生入學考試中給出的一個問題:

以下哪個選項不是從給定的有向圖中獲得的拓撲序列?

現在,請你編寫一個程序來測試每個選項。 輸入格式 第一行包含兩個整數 N 和 M,分別表示有向圖的點和邊的數量。接下來 M 行,每行給出一條邊的起點和終點。點的編號從 1 到 N。再一行包含一個整數 K,表示詢問次數。接下來 K 行,每行包含一個所有點的排列。一行中的數字用空格隔開。輸出格式 在一行中輸出所有不是拓撲序列的詢問序列的編號。詢問序列編號從 0 開始。行首和行尾不得有多余空格,保證存在至少一個解。數據范圍 1≤N≤1000, 1≤M≤10000, 1≤K≤100 輸入樣例: 6 8 1 2 1 3 5 2 5 4 2 3 2 6 3 4 6 4 5 1 5 2 3 6 4 5 1 2 6 3 4 5 1 2 3 6 4 5 2 1 6 3 4 1 2 3 4 5 6 輸出樣例: 3 4

小學徒解析:首先了解一下拓撲排序的定義:在圖論中,拓撲排序(Topological Sorting)是一個有向無環圖(DAG, Directed Acyclic Graph)的所有頂點的線性序列。且該序列必須滿足下面兩個條件:
1.每個頂點出現且只出現一次。
2.若存在一條從頂點 A 到頂點 B 的路徑,那么在序列中頂點 A 出現在頂點 B 的前面。
有向無環圖(DAG)才有拓撲排序,非DAG圖沒有拓撲排序一說。

//這題根據條件性質解題即可 #include<bits/stdc++.h> using namespace std; const int N=10050; int nodes[N],a[N],b[N],p[N]; int n,m; int main() {cin>>n>>m;int i,j;for(i=0;i<m;i++){cin>>a[i]>>b[i];}int k;cin>>k;bool flag;vector<int> v;for(i=0;i<k;i++){flag=1;for(j=1;j<=n;j++) {cin>>nodes[j];p[nodes[j]]=j;}for(j=0;j<m;j++){if(p[a[j]]>p[b[j]])flag=0;}if(!flag)v.push_back(i);}for(i=0;i<v.size();i++){if(i==0) cout<<v[i];else cout<<" "<<v[i];}cout<<endl; }

2.功夫傳人


//這題用鄰接表存儲一下信息,然后再dfs配合回溯即可 #include<bits/stdc++.h> using namespace std; const int N=1e5+50; vector<int> v[N]; int n,st[N]; double z,r,sum; void dfs(int u,double p) {if(st[u]) {sum+=p*v[u][0];return;}for(int i=0;i<v[u].size();i++)dfs(v[u][i],p*(1-r/100)); } int main() {cin>>n>>z>>r;int i,x;for(i=0;i<n;i++){int k;cin>>k;if(k==0) {st[i]=1;cin>>x;v[i].push_back(x);}else{while(k--){cin>>x;v[i].push_back(x);}}}dfs(0,z);cout<<(int)sum; }

3.二叉樹中的最低公共祖先

樹中兩個結點 U 和 V 的最低公共祖先(LCA)是指同時具有 U 和 V 作為后代的最深結點。給定二叉樹中的任何兩個結點,請你找到它們的 LCA。輸入格式 第一行包含兩個整數 M 和 N,分別表示詢問結點對數以及二叉樹中的結點數量。接下來兩行,每行包含 N 個不同的整數,分別表示二叉樹的中序和前序遍歷。保證二叉樹可由給定遍歷序列唯一確定。接下來 M 行,每行包含兩個整數 U 和 V,表示一組詢問。所有結點權值均在 int 范圍內。輸出格式 對于每對給定的 U 和 V,輸出一行結果。如果 U 和 V 的 LCA 是 A,且 A 不是 U 或 V,則輸出 LCA of U and V is A.如果 U 和 V 的 LCA 是 A,且 A 是 U 或 V 中的一個,則輸出 X is an ancestor of Y.其中 X 表示 A,Y 表示另一個結點。如果 U 或 V 沒有在二叉樹中找到,則輸出 ERROR: U is not found. 或 ERROR: V is not found. 或 ERROR: U and V are not found.數據范圍 1≤M≤1000, 1≤N≤10000 輸入樣例: 6 8 7 2 3 4 6 5 1 8 5 3 7 2 6 4 8 1 2 6 8 1 7 9 12 -3 0 8 99 99 輸出樣例: LCA of 2 and 6 is 3. 8 is an ancestor of 1. ERROR: 9 is not found. ERROR: 12 and -3 are not found. ERROR: 0 is not found. ERROR: 99 and 99 are not found. //常規方法建樹再按題目要求做即可 #include<bits/stdc++.h> using namespace std; const int N=1e4+50; int m,n; int in[N],pre[N],depth[N],p[N]; int build(int il,int ir,int pl,int pr,int d) {int root=pre[pl];int k=root;depth[root]=d;if(il<k) p[build(il,k-1,pl+1,pl+1+(k-1-il),d+1)]=root;if(k<ir) p[build(k+1,ir,pl+1+(k-1-il)+1,pr,d+1)]=root;return root; } unordered_map<int,int> pos; int main() {cin>>m>>n;int i;for(i=0;i<n;i++){cin>>in[i];pos[in[i]]=i;}for(i=0;i<n;i++){cin>>pre[i];pre[i]=pos[pre[i]];}int a,b,x,y;build(0,n-1,0,n-1,0);while(m--){cin>>a>>b;x=a,y=b;if(pos.count(a)&&pos.count(b)){a=pos[a],b=pos[b];x=a,y=b;while(a!=b){if(depth[a]>depth[b])a=p[a];elseb=p[b];}if(a!=x&&a!=y)printf("LCA of %d and %d is %d.\n",in[x],in[y],in[a]);else if(a==x)printf("%d is an ancestor of %d.\n",in[x],in[y]);elseprintf("%d is an ancestor of %d.\n",in[y],in[x]);}else if(pos.count(a)==0&&pos.count(b)==0)printf("ERROR: %d and %d are not found.\n",x,y);else if(pos.count(a)==0)printf("ERROR: %d is not found.\n",x);elseprintf("ERROR: %d is not found.\n",y);} }

二、工程項目訓練

項目&實習對于秋招來說意義重大,一份好的實習可以讓招聘方看到你的工作能力:
Tips:工作能力:工作能力指的是你工作相關的能力,是在目標崗位上的專業能力,通過實習可以積累你的實戰經驗,也可以向公司表明你在實際工作中的實操能力。
但是沒有實習也并不代表你秋招無法找到一份好的工作:
你可以將在校期間的社團、競賽等相關在校經歷補充在簡歷上;另外如果掌握某種和工作相關的知識或技能,也要盡可能寫得詳細一些,一定要表明你是如何把上述這些知識技能運用于工作中的。這樣可以表現出你很善于學習新知識的特點,給自己加印象分。另外要勤做項目,使自己的項目經歷與自己求職的目標崗位相契合,當我們能在簡歷中通過自己過往的經歷證明自己的能力優勢,并且這個能力優勢又是企業需要的,那么我們拿到面試機會的可能性就會很大。

下面由小學徒給大家帶來Qt的項目學習秘籍,希望大家喜歡。

day1.Qt(串口的使用)

這里必須夸下Qt Creator的幫助(不同于其他IDE幫助需要聯網)


學習圖形界面開發,肯定離不開幫助文檔的使用,因為它不像 C 語言那樣就那么幾個函數接口(api),圖形接口的接口可以用海量來形容,但我們只需要記住常用的幾個即可,君子性非異也,善假于物也。
大家要善于借助外物的力量,遇到不熟悉的直接去幫助文擋查看用法。

我們在日常使用中使用 Qt 幫助文檔,有幾個需要關注的點:

1)類使用的相關介紹

2)查看部件的信號

3)查看部件的事件(其所對應的虛函數如何編寫)

4)查看所用部件(類)的相應成員函數(功能,參數,返回值)

1)類使用的相關介紹

Qt另一個方便之處在于光標移動到類名字的地方,接著按“F1”即可跳轉到所對應的幫助文件:
可將光標移到類名字這里,然后按F1即可跳轉到所對應的幫助文檔。
2)查看部件的信號

以QplainTextEdit(純文本輸入框)為例我們來看到它的公有函數 

公有函數:共有成員可以被程序中的任何代碼訪問等等
Summary:Qt上手還是非常的容易,自帶的幫助文檔中的內容非常詳細,還有示例代碼,如果想著重學習UI的話:Qt Designer能讓你通過以拖動控件放置的方式,可視化的設計UI界面,當你設計好界面編譯完成后,在構建目錄中會找到文件名形如“ui_XXXX.h”的頭文件,這是Qt根據你的UI,自動幫你生成的C++代碼,內容就是UI的C++實現方式,大家可以跟著它自動生成的這段代碼學來學習UI是怎么實現的,這個比自己看文檔要來的直觀很多。而且對于初學者來說一個可拖拽位置可改變尺寸的有趣窗口要比一個黑框控制臺程序要有意思的多。

三、總結

很多事情不是因為看到希望了才去堅持,而是因為堅持才能看到希望!人生永遠的主題:貴在堅持,重在執著。后續小學徒會繼續更新C/C++后端實習經驗大禮包系列,希望大家喜歡,一起努力~~~

總結

以上是生活随笔為你收集整理的C/C++后端学习秘籍的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。