考研機試C++題目精選

更多內容會在godownio.github.io更新

算法練習(C++代碼)

考研上機或C語言代碼筆試準備,暨大機試原題+letcode+牛客+中南大等高校機試

快速冪算法

題目:輸入一個整數 n ,求 n^n 的個位數是多少。

快速冪算法:指數為偶數,則底數平方,指數除二;指數為奇數,則指數減一再把結果乘底數,底數平方,指數除二。指數看作二進制,除二可以看作位運算。

#include <iostream>using namespace std;
int main(){int n;cin>>n;int power=n;int base=n;int result = 1;while(power>0){if(power%2==1){result *= base;power /= 2;base *= base;//指數為奇數,先乘底數。除二小數部分舍去。底數平方 }else{power /= 2;base *= base;//指數為偶數,除二,底數平方 }}cout<<result<<endl; cout<<result%10;//mod 10即個位數
}

image-20240301105155142

斐波那契

輸入一個整數 n ,求斐波那契數列的第 n 項。第一項是1, 第二項是1。要求必須遞歸!

#include <iostream>using namespace std;int f(int n){if(n==1||n==2){return 1;}else return f(n-2)+f(n-1);
}int main(){int n;cin >> n;cout<<f(n);
}

成績排名

對 n 個同學的考試成績從大到小排名,成績相同的算同一名。求排名為 m 的成績。若無排名為m的成績,輸出最后一名的成績。

  • 輸入格式

一共三行

第一行:一個整數 n,表示同學的個數。

第二行:n 個整數,表示 n 個同學的成績。

第三行:一個整數 m,表示排名。

  • 輸出格式

一個整數,表示排名為 m 的成績。

  • 輸入樣例

6
100 100 99 98 97

2

  • 輸出樣例

99

#include <iostream>using namespace std;
int main(){int n,m;cout<<"輸入同學個數:"<<endl;cin>>n;int score[n];cout<<"輸入同學的成績:"<<endl;for (int i=0;i<n;i++){cin>>score[i];}//cout<<"1";for (int i=0;i<n;i++){for(int j=n-i-1;j>0;j--){if(score[j]>score[j-1]){int temp = score[j];score[j] = score[j-1];score[j-1] = temp;}}//冒泡排序}int i=0,j;for(j=1;j<n;j++){if(score[j]!=score[i]){score[++i]=score[j];}}//雙指針去重cout<<"輸入要查詢的排名:"<<endl;cin>>m;if(m>i+1){cout<<score[i]<<endl; }else{cout<<score[m-1];}
}

括號匹配

給定三種括號{ },[ ], ( ),和若干小寫字母的字符串,請問改字符串的括號是否匹配(可以嵌套)?

  • 輸入輸出

輸入格式:字符串s。 輸出格式:若匹配,輸出yes,否則輸出no。

  • 輸入樣例
{[a(v)d]q}
  • 輸出樣例
yes
#include <iostream>
#include <stack>using namespace std;
int main(){stack <int> s;string strs;cin>>strs;int m = strs.length();for (int i=0;i<m;i++){if(strs[i]=='('||strs[i]=='{'||strs[i]=='['){s.push(strs[i]);}if(strs[i]==')'){if(!s.empty()&&s.top()=='(') s.pop();else{cout<<"不匹配"; return 0;}}else if(strs[i]=='}'){if(!s.empty()&&s.top()=='{') s.pop();else{cout<<"不匹配"; return 0;}}else if(strs[i]==']'){if(!s.empty()&&s.top()=='[') s.pop();else{cout<<"不匹配"; return 0;}}//特別注意,棧為空s.top()不返回NULL,而是程序出錯}if (s.empty()) cout<<"匹配成功";else cout<<"匹配失敗";return 0;
} 

letcode&牛客dp+鏈表

不同路徑

image-20240301105643910

先看遞歸解決:很明顯從右下角開始思考,有從上和從左過來兩種方式,即等于左和上路徑條數之和。1*2,1*3…等很明顯只有一條路徑,即m or n一個為1,則返回1

#include <iostream>using namespace std;int path(int m,int n){if(m>1&&n>1){return path(m-1,n)+path(m,n-1);}else return 1;//1*2或者2*1或者1*6的路徑選擇都為1個 
}int main(){int m,n;cin>>m>>n;cout<<path(m,n);
}

很遺憾,遞歸不滿足時間復雜度。

非遞歸解決:定義一個dp數組,記錄每個格子的路徑條數,即除一行一列外,每個格子的路徑條數都等于上+左

#include <iostream>using namespace std;int path(int m,int n){int dp[m][n];for(int i=0;i<m;i++){for(int j=0;j<n;j++){if(j>0&&i>0){dp[i][j]=dp[i-1][j]+dp[i][j-1];}else{dp[i][j]=1;}}}return dp[m-1][n-1];
}int main(){int m,n;cin>>m>>n;cout<<path(m,n);
}

image-20240301112745113

障礙物版不同路徑

image-20240301112906322

首先,怎么輸入和傳參二維數組?

不能直接向某個變量cin二維數組,只能先輸入行和列,然后再逐個輸入,傳參就用vector,因為C++傳參定長,不能使用int[][] matrix,而是int matrix[][3]這種,不如使用vector方便

其次,障礙物點到達它的路徑條數為0,其余按照上個題目進行計算即可

不能直接把數組傳給vector,需要先進行類型轉換:

int arr[rows][cols] = {{0, 0, 0}, {0, 1, 0}, {0, 0, 0}};// 將數組轉換為 std::vectorvector<vector<int>> matrix;for (int i = 0; i < rows; ++i) {matrix.push_back(vector<int>(begin(arr[i]), end(arr[i])));}

注意:devC++的標準無法讀取vector庫,需要在編譯選項->添加參數"–std=c++11"

image-20240301154601417

image-20240301154628495

#include <iostream>
#include <vector>using namespace std;
int path(vector<vector<int>>& block){int m=block.size(),n=block[0].size();vector<vector<int>> dp(m,vector<int>(n));for(int i=0;i<m;i++){for(int j=0;j<n;j++){if(block[i][j]==0){if(j>0&&i>0){dp[i][j]=dp[i-1][j]+dp[i][j-1];}else{dp[i][j]=1;//第一行或第一列}}else{dp[i][j]=0;//有障礙物}}}return dp[m-1][n-1];
}
int main(){int rows,cols;cout<<"請輸入行數和列數:"<<endl;cin>>rows>>cols;vector<vector<int>> block(rows,vector<int>(cols));cout<<"請依次輸入矩陣:"<<endl;for(int i=0;i<rows;i++){for(int j=0;j<cols;j++){cin>>block[i][j];}}cout<<"左上到右下路徑條數為:"<<path(block);return 0;
}

秒了

image-20240301154356385

最小路徑和

太經典了,和回復祝順利一樣經典

image-20240301155000648

根據上兩道題,不難猜出每個位置的dp最小值為min(上,左)+本塊值,第一行則只能左+本塊值,第一列則只能上+本塊值,秒了

#include <iostream>
#include <vector>using namespace std;
int min(int n,int m){if(n>m) return m;else return n;
}
int path(vector<vector<int>>& block){int m=block.size(),n=block[0].size();vector<vector<int>> dp(m,vector<int>(n));dp[0][0]=block[0][0];for(int i=0;i<m;i++){for(int j=0;j<n;j++){if(i>0&&j==0){dp[i][j]=dp[i-1][j]+block[i][j];//第一行}if(j>0&&i==0){dp[i][j]=dp[i][j-1]+block[i][j];//第一列}if(j>0&&i>0){dp[i][j]=min(dp[i][j-1],dp[i-1][j])+block[i][j];}}}return dp[m-1][n-1];
}
int main(){int rows,cols;cout<<"請輸入行數和列數:"<<endl;cin>>rows>>cols;vector<vector<int>> block(rows,vector<int>(cols));cout<<"請依次輸入矩陣:"<<endl;for(int i=0;i<rows;i++){for(int j=0;j<cols;j++){cin>>block[i][j];}}cout<<"左上到右下最短路徑和為:"<<path(block);return 0;
}

image-20240301161828856

image-20240301161842319

image-20240301161914523

other 機試題

中南大上機壓軸

506ec55b1cc642a7afb2c28c5d175ce8

水印是我的CSDN號

  • 測試數據:

3 500
0.6 100
0.8 200
0.7 100
輸出 390

? 首先要對輸入的折扣進行排序,優先使用比率低的z進行支付。
? 然后用lowcost記錄目前多少錢是打過折的。T-lowcost就是剩余沒打折的。
? 每次循環用上一個人的折扣額度。若所有人折扣額度相加低于總價,則最后剩的部分就不打折

#include <iostream>
using namespace std;int paychase(int N,int T,double *z,int* H){int lowcost = 0;for(int i=0;i<N;i++){if(T<=lowcost+z[i]*H[i]){T = lowcost + (T-lowcost)*H[i];return T;}//菜品總價小于折扣else{lowcost = lowcost + z[i]*H[i];//lowcost為當前折扣限度,比如第二輪中就是0.6*100+0.8*200cout<<"lowcost:"<<lowcost<<endl;T = T - H[i] + z[i]*H[i];//折扣cout<<"T:"<<T<<endl;}}return T;
}int main(){int N,T;cout<<"請輸入人數和菜品總價:"<<endl;cin>>N>>T;double z[N];int H[N];cout<<"請輸入每個的折扣率和折扣上限:"<<endl;for(int i=0;i<N;i++){//cout<<i<<endl;cin>>z[i]>>H[i];}for (int i=0;i<N;i++){for (int j=i;j<N;j++){if(z[j]>z[i]){double tempz;int tempH;tempz=z[j];z[j]=z[i];z[i]=tempz;tempH=H[j];H[j]=H[i];H[i]=tempH;}}//折扣排序}int cost = paychase(N,T,z,H);cout<<"本次用餐總花費:"<<cost<<endl;return 0;
}

日期

輸入日期yyyymm dd,輸出是本年第幾天。

本題主要知識點:年份滿足以下條件之一為閏年,2月有29天:

  • 年份能被4整除,不能被100整除
  • 年份能被400整除

代碼不寫了

C語言考點

指針數組,數組指針

區分int (*p)[3] int *p[3]

  • 指針數組:int *p[3],實際上是個數組,只是里面元素都存放的指針,指針指向int型變量地址。
  • 數組指針:int (*p)[3],優先級()>[]>*,實際上是定義的一個指針,指向一個包含三個整數的數組。
int **p

int **p是一個指針的指針。

賦值判斷

int *a=&b(√)

int a=&b(×)

int *a; a=&b(√)

記住只有指針才能存地址,整型那些都不能存地址。以及int *a后,*a才是取值,a是指向的地址。

后文會更密碼學和C易錯點記錄

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/713735.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/713735.shtml
英文地址,請注明出處:http://en.pswp.cn/news/713735.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

面經分享|面了好未來NLP算法崗(實習),經歷坎坷但值了!

節前&#xff0c;我們組織了一場算法崗技術&面試討論會&#xff0c;邀請了一些互聯網大廠同學、參加社招和校招面試的同學&#xff0c;針對大模型技術趨勢、大模型落地項目經驗分享、新手如何入門算法崗、該如何備戰、面試常考點分享等熱門話題進行了深入的討論。 今天我分…

【復試2.293.1】c語言——基礎雜項

1.define定義常量類似全局變量&#xff0c;引用是直接拼到代碼中去。 2.關于e 3.參數傳遞 形參直接接收的是數組的起始地址 4.數組越界亂碼問題 5.scanf讀字符串的時候會自動在末尾放0&#xff08;結束符 6.scanf是讀取輸入緩沖區的數據&#xff0c;是一種拿走操作。讀取若有…

文本多分類

還在用BERT做文本分類&#xff1f;分享一套基于預訓練模型ERNIR3.0的文本多分類全流程實例【文本分類】_ernir 文本分類-CSDN博客 /usr/bin/python3 -m pip install --upgrade pip python3-c"import platform;print(platform.architecture()[0]);print(platform.machine…

C語言實現航班管理

航班管理系統&#xff0c;用C語言實現&#xff0c;可以作為課程設計&#xff0c;代碼如下&#xff1a; #include<iostream> #include<fstream> #include<vector> #include<string> #include<stdlib.h> using namespace std; //信息基類 clas…

Linux第67步_linux字符設備驅動_注冊和注銷

1、字符設備注冊與注銷的函數原型” /*字符設備注冊的函數原型*/ static inline int register_chrdev(unsigned int major,\ const char *name, \ const struct file_operations *fops) /* major:主設備號&#xff0c;Limnux下每個設備都有一個設備號&#xff0c;設備號分…

【六袆 - React】Next.js:React 開發框架;Next.js開發框架的特點

Next.js&#xff1a;React 開發框架 Next.js的特點 1.直觀的、基于頁面的路由系統&#xff08;并支持動態路由&#xff09; Next.js 提供了基于文件系統的路由&#xff0c;意味著你可以通過創建頁面文件來定義路由。 偽代碼示例&#xff1a; // pages/index.js export defa…

【GStreamer】basic-tutorial-2:創建、鏈接GstElement,修改其屬性、狀態

【目錄】郭老二博文之:圖像視頻匯總 1、示例注釋 #include <gst/gst.h>int main (int argc, char *argv[]) {GstElement *pipeline,

MYSQL--JDBC優化

一.JDBC優化: 優化前提: 有時候我們并不清楚某些表當中一共有多少列,以及這些列的數據類型,這個時候我們就需要提前通過一些方法提前了解到這些數據,從而更好的進行輸出 具體語句: package cn.jdbc;import java.sql.*;public class JDBCDEmo1 {public static void main(String…

C語言中的動態內存管理技巧:實現靈活的內存分配和釋放

概念 在C語言中&#xff0c;動態內存管理是實現靈活內存分配和釋放的關鍵。合理地管理動態內存可以提高程序的效率和擴展性。本文將介紹C語言中常用的動態內存管理方法和技巧&#xff0c;幫助讀者優化內存分配和釋放的過程。 常用的動態內存管理方法 內存分配&#xff1a;C語…

【數學建模獲獎經驗】2023第八屆數維杯數學建模:華中科技大學本科組創新獎獲獎分享

2024年第九屆數維杯大學生數學建模挑戰賽將于&#xff1a;2024年5月10日08:00-5月13日09:00舉行&#xff0c;近期同學們都開始陸續進入了備賽階段&#xff0c;今天我們就一起來看看上一屆優秀的創新獎選手都有什么獲獎感言吧~希望能幫到更多熱愛數學建模的同學。據說點贊的大佬…

elment-ui table表格排序后 清除排序箭頭/恢復默認排序 的高亮樣式

問題描述&#xff1a; 1.默認排序是按照名稱升序排列&#xff08;圖一&#xff09; 2.在選擇了篩選項以及其他排序方式之后&#xff0c;箭頭高亮是這樣的&#xff08;圖二&#xff09; 3.當我點擊清空按鈕后&#xff0c;類型清空了&#xff0c;并且傳給后端的排序方式是名稱/升…

探索色彩搭配的奧秘:如何選擇適合產品的理想配色方案

title: 探索色彩搭配的奧秘&#xff1a;如何選擇適合產品的理想配色方案 date: 2024/3/1 20:47:45 updated: 2024/3/1 20:47:45 tags: 色彩搭配品牌形象用戶體驗情感連接信息傳達視覺層次色調選擇 引言 友善的色彩搭配和色調選擇是現代產品設計中不可忽視的關鍵因素。通過正確…

Linux yum安裝pgsql出現Bad GPG signature錯誤

官方文檔&#xff1a;https://www.postgresql.org/download/linux/redhat/ sudo yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm sudo yum install -y postgresql12-server sudo /usr/pgsql-12/bin/…

Rust使用calamine讀取excel文件,Rust使用rust_xlsxwriter寫入excel文件

Rust使用calamine讀取已存在的test.xlsx文件全部數據&#xff0c;還讀取指定單元格數據&#xff1b;Rust使用rust_xlsxwriter創建新的output.xlsx文件&#xff0c;并寫入數據到指定單元格&#xff0c;然后再保存工作簿。 Cargo.toml main.rs /*rust讀取excel文件*/ use cala…

Pytest-parametrize實現測試用例與測試數據分離

Pytest自動化框架&#xff0c;實現自動化測試用例與測試數據分離方法&#xff1a; 1.測試用例數據準備&#xff0c;使用yaml文件編輯&#xff0c;如下述teladress.yaml 2.通過pytest框架裝飾器pytest.mark.parametrize實現測試數據傳參 示例&#xff1a; 測試用例文件&…

Tomcat 架構

一、Http工作原理 HTTP協議是瀏覽器與服務器之間的數據傳送協議。作為應用層協議&#xff0c;HTTP是基于TCP/IP協議來傳遞數據的&#xff08;HTML文件、圖片、查詢結果等&#xff09;&#xff0c;HTTP協議不涉及數據包&#xff08;Packet&#xff09;傳輸&#xff0c;主要規定了…

c語言之字符串的輸入和輸出

c語言在輸出字符串時&#xff0c;用格式符‘%s"&#xff0c;代碼比較簡潔 如果說數組長度大于字符串長度&#xff0c;也只輸出\0前的內容 字符串默認后面有\0. 如果字符串有多個\0&#xff0c;會默認在第一個\0結束 #include<stdio.h> int main() {int i;char a…

GO數組切片

1. 數組 數組是一個由固定長度的特定類型元素組成的序列&#xff0c;一個數組可以由零個或多個元素組成。 因為數組的長度是固定的&#xff0c;所以在Go語言中很少直接使用數組。 Go語言數組的聲明&#xff1a; var 數組變量名 [元素數量]Type 1 數組變量名&#xff1a;數…

本地快速部署谷歌開放模型Gemma教程(基于WasmEdge)

本地快速部署谷歌開放模型Gemma教程&#xff08;基于WasmEdge&#xff09; 一、介紹 Gemma二、部署 Gemma2.1 部署工具2.1 部署步驟 三、構建超輕量級 AI 代理四、總結 一、介紹 Gemma Gemma是一系列輕量級、最先進的開放式模型&#xff0c;采用與創建Gemini模型相同的研究和技…

持續集成(CICD)- Jenkins插件安裝失敗解決辦法

解決辦法&#xff1a;將插件安裝更新源需要改成國內鏡像源 具體步驟如下&#xff1a; 步驟一&#xff1a;修改Jenkins工作目錄下的 hudson.model.UpdateCenter.xml 文件&#xff0c;將url 改為http://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json 步驟二…