23.复习

1.设置输出数字宽度

#include <iostream>using namespace std;int main(){int a=123456789,b=0,c=-1;printf("%8d %8d %8d",a,b,c);return 0;
}

2.保留小数点位数

#include <iostream>using namespace std;int main(){double a;cin>>a;printf("%.3lf\n",a);return 0;
}

3.闰年判定

四年一润且百年不润,或者四百年一润
#include <iostream>using namespace std;int main(){/** 四年一润且百年不润,或者四百年一润* */int y;cin>>y;if(y%4==0&&y%100!=0||y%400==0){cout<<"YES"<<endl;}elsecout<<"NO"<<endl;return 0;
}

4.不借助数组的循环找最值

#include <iostream>
#include <climits>
using namespace std;int main(){int n;cin>>n;int mx=INT_MIN,mi=INT_MAX;for(int i=1;i<=n;i++){int x;cin>>x;if(mx<x) mx=x;if(mi>x) mi=x;}cout<<mx-mi<<endl;return 0;
}
#include <iostream>
#include <climits>
using namespace std;int main(){int n,x;cin>>n;cin>>x;int mx=x,mi=x;for(int i=2;i<=n;i++){cin>>x;if(mx<x) mx=x;if(mi>x) mi=x;}cout<<mx-mi<<endl;return 0;
}

5.模运算性质

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

#include <iostream>
#include <climits>
using namespace std;
const int mod=1000;
int main(){int a,b,ans=1;cin>>a>>b;for(int i=1;i<=b;i++){ans=(ans%mod*a%mod)%mod;}cout<<ans<<endl;return 0;
}
#include <iostream>
#include <climits>
using namespace std;
const int mod=1e6;
int main(){int n,ans=1,sum=0;cin>>n;for(int i=1;i<=n;i++){ans=(ans%mod*i%mod)%mod;sum=(sum%mod+ans%mod)%mod;}cout<<sum<<endl;return 0;
}

6.最大公约数、最小公倍数

#include <iostream>
#include <climits>
using namespace std;
//12 24
int gcd(int a,int b){return b==0? a:gcd(b,a%b);
}
int lcm(int a,int b){return a/gcd(a,b)*b;
}
int main(){int a,b;cin>>a>>b;cout<<"最大公约数:"<<gcd(a,b)<<endl;cout<<"最小公倍数:"<<lcm(a,b)<<endl;return 0;
}

7.素数

小素数判定(小于1e9)—试除法
小优化–>i遍历到根号x之前即可
#include<iostream>
using namespace std;bool check(int x) {if (x < 2) return false;//注意:此处只需要遍历到根号前即可for (int i = 2; i <= sqrt(x);i++) if (x % i == 0) return false;return true;
}
int main() {//小素数判定- 试除法int a, b;  cin >> a >> b;for (int i = a; i <= b; i++) {if (check(i)) cout << i << endl;}return 0;
}

8.特判完全平方数

#include <iostream>
#include <climits>
#include <cmath>
using namespace std;int main(){int x;cin>>x;if(sqrt(x)==int(sqrt(x))){cout<<"YES";}else{cout<<"NO"<<endl;}return 0;
}

9.分解质因子

#include <iostream>
#include <climits>
#include <cmath>
using namespace std;int main(){int n;cin>>n;int i=2,flag=0;cout<<n<<"=";while(n!=1){if(n%i==0){if(!flag){cout<<i;flag=1;}else{cout<<"*"<<i;}n=n/i;}else{i++;}}return 0;
}

10.埃氏筛

#include <iostream>
#include <climits>
#include <cstring>using namespace std;
const int N=1e3+10;
bool vis[N];//标记数组
int primes[N],id;//素数表
void E_sieve(int n){//默认0是素数
//    vis[0]=vis[1]=1;for(int i=2;i<=n;i++){if(!vis[i]){primes[++id]=i;for(int j=i*i;j<=n;j=j+i){vis[j]=1;}}}
}
int main(){int n;cin>>n;E_sieve(n);for(int i=1;i<=id;i++){cout<<primes[i]<<" ";}return 0;
}

11.最长平台

<注意>:r一定要走到n+1的位置上,因为如果最长平台出现在末尾,r必须走到末尾的下一位,这样r-l的长度才正确
#include <iostream>using namespace std;
const int N=1e5+10;
int a[N],n,maxlen=1;
int main(){cin>>n;for(int i=1;i<=n;i++){cin>>a[i];}/**   1  2  3  4  5  6  7  8  9  10* a 1  2  2  3  3  3  5  5  5  5*                     l          r* */int l=1,r=2;while(r<=n+1){if(a[l]!=a[r]){maxlen=max(maxlen,r-l);l=r;}r++;}cout<<maxlen<<endl;return 0;
}

12.线性模拟环

线性扩增2倍模拟环
#include <iostream>
#include <stack>using namespace std;int main(){string s,subs;cin>>s>>subs;if(s.size()<subs.size()) swap(s,subs);s=s+s;//线性扩增二倍模拟环if(s.find(subs)!=-1){cout<<"true"<<endl;} else{cout<<"false"<<endl;}return 0;
}

13.表达式求值(stack)

前缀表达式

#include <iostream>
#include <stack>
#include <string>using namespace  std;const int N=1e4+10;
string s[N];
int id=0;int main(){string str;while(cin>>str){s[++id]=str;} 
//	for(int i=1;i<=id;i++){
//		cout<<s[i]<<" ";
//	}//前缀表达式的求解stack<double> stk;for(int i=id;i>=1;i--){if(s[i][0]>='0'&&s[i][0]<='9'){//如果是数字就入栈 stk.push(stod(s[i]));}else if(s[i][0]=='+'){double a,b;a=stk.top();stk.pop();b=stk.top();stk.pop();stk.push(a+b);}else if(s[i][0]=='-'){double a,b;a=stk.top();stk.pop();b=stk.top();stk.pop();stk.push(a-b);}else if(s[i][0]=='*'){double a,b;a=stk.top();stk.pop();b=stk.top();stk.pop();stk.push(a*b);}else if(s[i][0]=='/'){double a,b;a=stk.top();stk.pop();b=stk.top();stk.pop();stk.push(a/b);}}	printf("%lf\n",stk.top());return 0;
}

中缀表达式

#include <iostream>
#include <stack>
#include <string>
#define int long long
using namespace  std;string s;signed main(){int num=0;char sign='+';stack<int> stk;cin>>s;for(int i=0;i<s.size();i++){if(s[i]>='0'&&s[i]<='9'){num=num*10+s[i]-'0';}//此处必须为if不能为else if因为最后一个数字不但要参入计算num,还要//对栈进行操作 if(s[i]=='+'||s[i]=='-'||s[i]=='*'||s[i]=='/'||i==s.size()-1){if(sign=='+'){stk.push(num);}else if(sign=='-'){stk.push(-num);}else if(sign=='*'){stk.top()=stk.top()*num;}else if(sign=='/'){stk.top()=stk.top()/num;}num=0;sign=s[i];}}int ans=0;while(!stk.empty()){ans+=stk.top();stk.pop();}cout<<ans<<endl;return 0;
}

后缀表达式

#include <iostream>
#include <stack>
#define int long long
using namespace std;signed main(){stack<int> stk;string s;while(cin>>s){if(s[0]>='0'&&s[0]<='9'){stk.push(stoll(s));
//			cout<<stk.top()<<endl;}else{
//			cout<<s<<endl;for(int i=0;i<s.size();i++){if(s[i]=='@') break;int b=stk.top();stk.pop();int a=stk.top();stk.pop();if(s[i]=='+'){stk.push(a+b);}else if(s[i]=='-'){stk.push(a-b);}else if(s[i]=='*'){stk.push(a*b);}else if(s[i]=='/'){stk.push(a/b);}}}}cout<<stk.top()<<endl;return 0;
}

14.搜索与回溯

二维迷宫类问题的搜索与回溯问题

马走日

#include <iostream>
#include <cstring>
using namespace std;
const int N=50;
int g[N][N],n,m,sx,sy,cnt;
bool vis[N][N];
int dx[]={-2,-2,-1,-1,1,1,2,2},dy[]={1,-1,2,-2,2,-2,1,-1};
struct node{int x,y,depth;
};
void dfs(node s){if(s.depth==n*m){cnt++;return;}for(int i=0;i<8;i++){int bx=s.x+dx[i],by=s.y+dy[i];if(bx<1||bx>n||by<1||by>m||vis[bx][by]) continue;vis[bx][by]=1;dfs({bx,by,s.depth+1});vis[bx][by]=0;}
}
void solve(){cin>>n>>m>>sx>>sy;sx++;sy++;memset(vis,0,sizeof vis);cnt=0;vis[sx][sy]=1;dfs({sx,sy,1});cout<<cnt<<endl;
}
int main(){int t;cin>>t;while(t--){solve();}	return 0;
}
#include <iostream>
#include <cstring>
using namespace std;
const int N=50;
int n,k,cnt[N];
bool vis[N];
void dfs(int depth,int start){//终止条件: if(depth==k+1){for(int i=1;i<=depth-1;i++){printf("%3d",cnt[i]);}cout<<endl;return;}//枚举方案数: for(int i=start;i<=n;i++){//判断是否需要标记: if(!vis[i]){vis[i]=1;cnt[depth]=i;//搜索 : dfs(depth+1,i);//回溯 : vis[i]=0;}}
}
int main(){cin>>n>>k;dfs(1,1);return 0;
}

15.每日一题:外观数列

#include <iostream>
#include <vector>
using namespace std;
//33111
//    i
string solve(string& s){vector<int> vec;int cnt=1;for(int i=0;i<s.size();i++){if(i==s.size()-1){vec.push_back(cnt);vec.push_back(s[i]-'0');}else if(s[i]!=s[i+1]){vec.push_back(cnt);vec.push_back(s[i]-'0');cnt=1;}else if(s[i]==s[i+1]){cnt++;}}int num=0;for(auto it:vec){num=num*10+it;}return s=to_string(num);
}
int main(){string s;int n;cin>>s>>n;for(int i=1;i<=n-1;i++){s=solve(s);}cout<<s<<endl;return 0;
} 

16.删除问题

删完最小

#include <iostream>
#include <cstring>
#include <vector>
#include <string> 
using namespace std;
//69134 2
//934a
// j
//1234a 2
//34
//12345s-1
//99876a 2
//    j
//998aint main(){string s;int k;cin>>s>>k;s=s+'a';for(int i=1;i<=k;i++){//每次循环删一个数,一共删k次 for(int j=0;j<=s.size()-2;j++){if(s[j]<s[j+1]){s.erase(s.begin()+j);break;}}}	s.pop_back();cout<<s<<endl;return 0;
}

删完最大

#include <iostream>
#include <algorithm>
#include <string>
using namespace std;
#define int long long
string s;signed main(){cin>>s;s=s+'0';int n;cin>>n;while(n--){for(int i=0;i<s.size()-1;i++){if(s[i]>s[i+1]){s.erase(s.begin()+i);break;}}}s[s.size()-1]='\0';cout<<stoi(s)<<endl;return 0;
}

17.小松鼠聚会

#include <iostream>
#include <vector>
#include <queue>
#include <cstring>
using namespace std;
const int N=1e6+10;
vector<int> g[N];
bool vis[N];
int a[N];
int n,m,k,ans;
struct node{int x,depth;
};
void bfs(node s){queue<node> q;q.push(s);vis[s.x]=1;while(!q.empty()){node cur=q.front();q.pop();if(cur.depth-1<=k){ans+=a[cur.x];}else{break;}for(int i=0;i<g[cur.x].size();i++){int id=g[cur.x][i];if(!vis[id]){q.push({id,cur.depth+1});vis[id]=1;}}}
}
int main(){cin>>n;m=n-1;for(int i=1;i<=n;i++){cin>>a[i];}for(int i=1;i<=m;i++){int u,v;cin>>u>>v;g[u].push_back(v);g[v].push_back(u);}cin>>k;for(int st=1;st<=n;st++){memset(vis,0,sizeof vis);ans=0;bfs({st,1});cout<<ans<<endl;}return 0;
}

18.dijkstra求单源最短路

邻接矩阵版本

#include<iostream>
#include<climits>
#include<algorithm>
using namespace std;
const int N = 1e4 + 10, INF = INT_MAX;
int g[N][N];//邻接矩阵
int mindis[N];//最短路数组,mindis[i]代表起点到i点的最短路
bool vis[N];
int n, m, s;
//邻接矩阵版dijkstra,同时可以处理重边和边权为0的情况
void dijkstra(int s) {//dijkstra第一步:集合中起点值置0mindis[s] = 0;for (int i = 1; i <= n; i++) {//dijkstra性质:每次循环从集合中找到未被标记过的最小值(和下标),该最小值就是起点到该点的最小值int mi = INT_MAX, minId = 0;for (int j = 1; j <= n; j++) {if (!vis[j] && mindis[j] < mi) {mi = mindis[j];minId = j;}}//找到起点到该点的最小值立马标记vis[minId] = 1;//dijkstra以minId作为中转点,向外进行扫描,更新起点到其他个点的最短距离即mindis数组for (int j = 1; j <= n; j++) {if (!vis[j] && g[minId][j]!=INT_MAX) {//mi是起点到minId的最短距离+minId到j距离 < 当前起点到j的最短距离if (mi + g[minId][j] < mindis[j]) {mindis[j] = mi + g[minId][j];}}}}
}
int main() {cin >> n >> m >> s;for (int i = 1; i <= n; i++) for (int j = 1; j <= m; j++) g[i][j] = INT_MAX;for (int i = 1; i <= m; i++) {int u, v, w; cin >> u >> v>> w;//有向图注意单向连边g[u][v] = min(g[u][v], w);//本题有重边,在所有的重边里面找到最小值}fill(mindis, mindis + N, INF);dijkstra(s);for (int i = 1; i <= n; i++) cout << mindis[i] << " ";return 0;
}

邻接表版本

#include <iostream>
#include <vector>
#include <climits>
using namespace std;
#define int long long
const int N=1e4+10,MX=INT_MAX;
vector<pair<int,int>> g[N];
int n,m,st,mindis[N],vis[N];
void dijkstra(int s){mindis[s]=0;//每次循环标记mindis集合中的一个,标记了相当于找对了起点到该点的最短路,n个都标记了说明dij算法已经完成 for(int i=1;i<=n;i++){//dijkstra性质:每次循环找点未被标记过的最小值(和下标),该最小值就是起点到该点的最短路径int mi=INT_MAX,minId=0;for(int j=1;j<=n;j++){if(!vis[j]&&mi>mindis[j]){mi=mindis[j];minId=j;}}//找到最小值意味着最短路找到了,要立马标记vis[minId]=1;//以mi最为中转站,访问它未被标记过的邻接点,更新mindis集合for(int j=0;j<g[minId].size();j++){int id=g[minId][j].first,w=g[minId][j].second;if(!vis[id]&&mi+w<mindis[id]) mindis[id]=mi+w;}}
}
signed main(){cin>>n>>m>>st;for(int i=1;i<=m;i++){int u,v,w;cin>>u>>v>>w;g[u].push_back({v,w});}fill(mindis,mindis+N,MX);dijkstra(st);for(int i=1;i<=n;i++) cout<<mindis[i]<<" ";return 0;
}

19.Floyd算法

多元最短路
O(n^3)
三层循环枚举中转站,起点,终点,更新mindis i j
#include <iostream>
#include <vector>
#include <climits>
using namespace std;
const int N=1e3+10,INF=INT_MAX;
int mindis[N][N],n,m,st,t;void Floyd(){//枚举中转站for(int k=1;k<=n;k++){//枚举起点for(int i=1;i<=n;i++){//枚举终点for(int j=1;j<=n;j++){//判断i k k j 之间是否有连边if(g[i][k]!=INF&&g[k][j]!=INF&&mindis[i][k]+mindis[k][j]<mindis[i][j]){mindis[i][j]=mindis[i][k]+mindis[k][j];} } } } 
}
int main(){cin>>n>>m>>st>>t;fill(mindis[0],mindis[0]+N*N,INF);for(int i=1;i<=m;i++){int u,v,w;cin>>u>>v>>w;g[u][v]=g[v][u]=w;}Floyd();cout<<mindis[st][t]<<endl;return 0;
} 

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

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

相关文章

3款免费又实用的良心软件,功能强大到离谱,白嫖党的最爱

闲话不多说&#xff0c;直接上硬货&#xff01; 1、酷狗概念版 这款正版音乐APP可谓是“良心之作”。不论你是新用户还是老用户&#xff0c;只要踏入概念版的门槛&#xff0c;即可获得3个月VIP作为见面礼。更令人惊喜的是&#xff0c;每天只需轻松一点播放歌曲&#xff0c;即…

IDEA管理Git + Gitee 常用操作

文章目录 IDEA管理Git Gitee 常用操作1.Gitee创建代码仓库1.创建仓库1.点击新建仓库2.完成仓库信息填写3.创建成功4.管理菜单可以修改这个项目的设置 2.设置SSH公钥免密登录基本介绍1.找到.ssh目录2.执行指令 ssh-keygen3.将公钥信息添加到码云账户1.点击设置2.ssh公钥3.复制.…

海思Hi3403V100方案双目视频融合模组测试

Hi3403V100是海思面向高端市场应用推出的专业 Ultra-HD Smart IP Camera SOC&#xff0c;该芯片最高支持四路sensor输入&#xff0c;支持最高4K60的ISP图像处理能力。 海思Hi3403V100方案双目视频模组采用了海思Hi3403V100方案核心板双目视频融合IMX334 Sensor板测试&#xff…

一文带你搞定python脚本(.py)打包为可执行文件(.exe)

文章目录 01、为什么要打包Python脚本&#xff1f;02、打包步骤&#xff1f;第一步&#xff1a;环境配置与操作包安装第二步&#xff1a;开始打包第三步&#xff1a;输入打包命令ICO图片生成示例&#xff1a;总结&#xff1a; 03、多个.py文件打包import 和 from ... import *用…

鸿蒙开发学习入门教程之环境配置

最近鸿蒙开发越来越火&#xff0c;各个大厂都有鸿蒙版本的计划和宣传&#xff0c;看这个趋势&#xff0c;可能会在几年内发展壮大&#xff0c;为我们移动端码农开辟一片新的职场。所以现在开始学起来还是很有必要的。今天就一起开始配置环境搞起来吧。 首先&#xff0c;找到官…

当金蝶遇上BI,马上就能看到数据可视化效果

最近整理咨询内容时发现&#xff0c;很多企业用户在咨询时都会问是否有行业案例&#xff0c;究其原因时他们没用过BI数据分析&#xff0c;不知道BI可以做什么&#xff0c;能做到什么地步。其实&#xff0c;要知道这些东西还不简单&#xff0c;只需要注册奥威BI软件&#xff0c;…

Window10数据库崩溃启动失败,MySQL8.0.30通过data文件夹恢复数据库到Docker

背景&#xff1a; 昨天关机前还在使用mysql&#xff0c;一切正常&#xff0c;但今天打开电脑&#xff0c;发现mysql启动不起来了&#xff0c;老是提示端口占用&#xff0c;但是系统也没有新安装什么软件&#xff0c;而且通过查询nat命令也没发现3306端口占用。而且修改成3307等…

基于SpringBoot的农产品特色供销系统(蔬菜商城)

基于SpringBoot的农产品特色供销系统&#xff08;蔬菜商城&#xff09; 系统介绍 该系统使用Java、MySQL、Redis、Spring Boot和HTML等技术作为系统的技术支撑&#xff0c;实现了以下功能模块&#xff1a; &#xff08;1&#xff09;后台管理模块&#xff0c;包括权限、日志、…

11---数字温度 OR 湿度传感器电路设计

视频链接 数字温度or湿度传感器电路设计02_哔哩哔哩_bilibili 数字温度 OR 湿度传感器电路设计 1、温湿度传感器 DHT11 DHT11是一款有已校准数字信号输出的温湿度传感器。 其精度湿度-5%RH&#xff0c; 温度-2℃&#xff0c;量程湿度20-90%RH&#xff0c; 温度0~50℃。 D…

巫蛊之祸——汉武帝后期的一次重大事件

引 言 “巫蛊之祸”是汉武帝在位后期发生的一次重大政治事件&#xff0c;也是西汉历史上最大的冤案&#xff0c;此案导致皇后卫子夫和太子刘据自杀&#xff0c;数万人头落地&#xff0c;几十万人被牵连。 一、巫蛊之术的由来 《汉书》记载&#xff0c;巫蛊之术起源自胡巫&am…

智慧水务大数据,信息化云平台建设,综合运营管理平台

一、水务信息化的建设方向 1、完善基础设施构建软件定义的数据中心 基础设施&#xff0c;建设新一代软件定义的数据中心;逐步整合水务和海洋资源、统一、规范化各业务系统,按照一体化、一站式的服务进行建设。 2、整合信息资源建立智慧决策体系 统一信息采集方式&#xff0c;…

Mybatis的使用快速入门

1. 数据库准备 假设目前存在以下数据库表。 CREATE TABLE t_emp(emp_id INT AUTO_INCREMENT,emp_name CHAR(100),emp_salary DOUBLE(10,5),PRIMARY KEY(emp_id) );2. 依赖导入 pom.xml <dependencies><!-- mybatis依赖 --><dependency><groupId>or…