桂电信科 2020 程序设计大赛 题解
发布日期:2021-05-07 16:48:51 浏览次数:19 分类:精选文章

本文共 3416 字,大约阅读时间需要 11 分钟。

A

相当于hello world,就是多了一个a控制一下个数

//A#include
using namespace std;int main(){ int t; cin>>t; while(t--){ int a; cin>>a; for(int i=0;i

B

排序
这数据量冒泡排序也能过

//B#include
using namespace std;int main(){ int a[20005]; int n; cin>>n; for(int i=0;i
>a[i]; } sort(a,a+n); for(int i=0;i

C

回文数,因为只有四位,用四个变量存该四位数的个、十、百、千位即可,然后遍历一遍1001~9999

//C#include
using namespace std;int main(){ int a,b,c,d; for(int i=1001;i<=9999;i++){ a=i%10;//个位 b=(i%100)/10;//十位 c=(i%1000)/100;//百位 d=(i%10000)/1000;//千位 if(a==d&&b==c) cout<
<

D

01字串,输出128以内的二进制,可以直接开数组写二进制模拟,逢二进一。我就直接写了一个十转二的函数,偷懒了。

//D#include
using namespace std;void stob(int num){ int n=num; int k=0; int a[7]; while(num>1){ a[k++]=num%2; num/=2; } a[k]=num; for(int i=6;i>k;i--){ cout<<0; } for(int i=k;i>=0;i--){ cout<

E

小写转大写
第一个字母直接转,后面的看空格,空格后的第一个字母转大写。
输入要用getline(),一行字符串输入,可以包含空格。
然后正常写一直有点小错,就把输入放进while()里去了,这种oj判定能过,编译器就卡了

//E#include
using namespace std;int main(){ int t; cin>>t; string s; while(getline(cin,s)){ s[0]-=32; for(int i=1;i

F

思维题

#include
using namespace std;int a[21][21];int main(){ int t; cin>>t; while(t--){ int n,k; cin>>n; memset(a,0,sizeof(a)); vector
ve; for(int i=1;i<=n;i++){ for(int j=1;j<=n;j++){ cin>>k; if(k==1&&a[j][i]==0&&i!=j) a[i][j]=1; if(k==1&&a[j][i]==1&&i!=j) ve.push_back(i),ve.push_back(j); } } sort(ve.begin(),ve.end()); for(int i=0;i

G

这是蓝桥杯里摘的题
思路一下就能看出来用递归,耐心点把An和Sn找到,就出来了。

//G#include
using namespace std;void An(int n){ for(int i=1;i<=n;i++){ cout<<"sin("<
>t; while(t--){ int n; cin>>n; Sn(n); cout<

H

这题说是最短路,边权有负,没有负环,数据范围也不大,用floyd就出了,可是测试样例一直没过,可能是自己对算法还没有足够理解。

#include
using namespace std;#define INF 0x3f3f3f3f#define M 1305int maps[M][M];int n,m;int u,v,l;void floyd(){ for(int k=1;k<=n;k++){ for(int i=1;i<=n;i++){ for(int j=1;j<=n;j++){ if(maps[i][j]>maps[i][k]+maps[k][j]){ maps[i][j]=maps[i][k]+maps[k][j]; } } } }}int main(){ int t; cin>>t; while(t--){ cin>>n>>m; for(int i=1;i<=n;i++){ for(int j=1;j<=n;j++){ maps[i][j]=INF; } maps[i][i]=0; } for(int i=0;i
>u>>v>>l; maps[u][v]=maps[v][u]=l; } floyd(); for(int i=2;i<=n;i++){ cout<
<

H*

出题人打错符号了,还是一个H,就叫它H*吧。
蓝桥杯小题——完美的代价。

//Hh 回文#include
using namespace std;void solve(){ string s; int n,j,cnt=0,flag=0,index; cin>>n>>s; int last=n-1; for(int i=0;i
i;j--){ if(s[i]==s[j]){ for(int u=j;u
>t; while(t--){ solve(); } return 0;}

I

本场出了A最简单的题目,就第一行一个数,第二行两个数,第三行三个数…
自己定两个变量,一个控制行数,一个一直++。

//I#include
using namespace std;int main(){ int t; cin>>t; while(t--){ int m; cin>>m; int k=1; int p=1; for(int i=1;i<=m;i++){ for(int j=1;j<=p;j++){ cout<

J

找到区间直接排序取最大。
开了两个数组,一个初始,一个过渡。

//J#include
using namespace std;int main(){ int t; cin>>t; while(t--){ int n; int a[1005]; memset(a,0,sizeof(a)); cin>>n; for(int i=1;i<=n;i++){ cin>>a[i]; } int m; int b[1005]; memset(b,0,sizeof(b)); cin>>m; while(m--){ int l,r,K; cin>>l>>r>>K; for(int i=0,j=l;j<=r;j++,i++){ b[i]=a[j]; } sort(b,b+r-l+1); cout<
<
上一篇:Find a multiple
下一篇:c++ 快速读入

发表评论

最新留言

感谢大佬
[***.8.128.20]2025年04月06日 04时39分57秒