2023暑假知行进阶营第五周题解
7-1 图的先深搜索朴素的 DFS
12345678910111213141516171819202122232425262728293031323334353637383940#include<bitsdc++.h>using namespace std;int head[11];bool vis[11];int n,m,a,cnt,t;struct edge{ int to; int last;}e[51];void add(int x,int y){ cnt++; e[cnt].to=y; e[cnt].last=head[x]; head[x]=cnt;}void dfs(int k){ if(t==n) return; vis[k]=true; t++; cout<<k<<" "; for(int i=head[k];i>=1;i=e[i].last){ if(!vis[e[i].to]) dfs(e[i].to); ...
2023暑假知行进阶营第四周题解
第四周题解7-1 根据后续和中序遍历输出先序遍历利用数组保存树的后序遍历和中序遍历,根据后续遍历和中序遍历的特点还原树,并根据先序遍历的顺序,即根左右,利用函数递归输出打印,注意输出格式的正确性。
1234567891011121314151617181920212223#include<bits/stdc++.h>using namespace std;const int N = 40;typedef long long LL;int in[N], last[N];int n;void pre(int root, int s, int e) //root:当前子树的根节点;s:中序遍历的起始位置;e:中序遍历的终止位置{ if(s > e) return; //边界 int idx = s; while(in[idx] != last[root]) idx++; //找到root位于中序遍历中的下标idx cout << " " << last[root]; pre(root - (e - idx) - ...
2023暑假知行进阶营第三周题解
markdown 文章内容
7-1词典这道题用map写很快的,有些同学是用字符串数组遍历查找做的,数据量大的话会超时,建议大家好好学一下c++,很好用。
1234567891011121314151617181920#include <iostream>#include <map>using namespace std;int main(){ int n,m; cin>>n>>m; map<string,string>mp; while(n--){ string s1,s2; cin>>s1>>s2; mp[s2]=s1; } while(m--){ string s; cin>>s; if(mp.count(s)) cout<<mp[s]<<endl; else cout<< ...
2023暑假知行进阶营第二周题解
markdown 文章内容
7-1 计算阶乘和
求的是前n项的阶乘和,阶乘可以递归方式定义:0!=1,n!=(n-1)!×n
1234567891011121314151617181920212223242526272829const int N = 15;int f[N];//全局变量int solve(int i) { f[i] = i * f[i - 1]; return f[i];}int main() { f[0] = 1; int n; cin >> n; int sum = 0; for (int i = 1; i <= n; i++) { sum += solve(i); } cout << sum;
7-2 求两个一元多项式的和
利用map。
map可以直接查找键值对。把指数当做键,因为不同指数惟一的,系数当做值。
map默认按照键值升序排列,题目输入是按指数降序,计算过程按指数有序。最后输出结果时要再按指数降序输出,可以利用rbegin(),rend()(还可以 ...
2023暑假知行进阶营第一周题解
1:__gcd函数显然可以直接调用__gcd(a, b)这个函数返回a,b的最大公因数, 而最小公倍数=a * b / __gcd(a, b);
12int a, b; cin >> a >> b;cout << __gcd(a, b) << ' ' << a * b / __gcd(a, b);
1-2 素数判断显然只需要处理出1e5之内的素数,然后相邻判断是否差为2即可
1234567891011121314int n; cin >> n;vector<int> v;for (int i = 2; i <= n; i ++ ) { bool fg = true; for (int j = 2; j <= sqrt(i); j ++ ) if(i % j == 0) fg = false; if(fg) v.pb(i);}int cnt = 0;for (int i = 1; i < v.size(); i ++ ) ...
day10 2023年AI十大展望
新年伊始,大模型的话题热度不减。2022年11月底,ChatGPT展现的惊人能力将大模型研究和应用热度推向高潮,人们激烈讨论着这个高级“物种”的推出意味着什么,比如是否会颠覆搜索引擎市场格局。踏入2023年,这不禁让我们对GPT-4的发布充满遐想,它会比ChatGPT更上一层楼吗?会有哪些不一样的惊喜?
岁末年初之际,科技圈的年度盘点不胜枚举,相关技术预测倒是不多。本文作者Rob Toews发布了2023年AI发展的十大预测,整体来看,大部分预测都离不开“大模型”这个关键词,具体分析也有其道理。当然,其中的文生图、人形机器人等领域的发展也举足轻重。2023,让我们拭目以待。
1 重磅事件:GPT-4将在年初发布
GPT-4是OpenAI的新一代生成语言模型,它有着强大的功能,最近到处流传着它的消息。
GPT-4预计将在2023年年初发布,相较于GPT-3和3.5,GPT-4的性能有着跳跃式的提升。尽管最近有关ChatGPT的讨论正在火热朝天地进行,但相比GPT-4,这只是前奏而已,让我们拭目以待!
GPT-4 会是什么样子的呢?与人们的直觉不同,我们预测它不会比其前身GPT-3大太多 ...
1-5 约瑟夫环
有n个人围成一圈(编号为1~n),从第1号开始进行1、2、3报数,凡报3者就退出,下一个人又从1开始报数……直到最后只剩下一个人时为止。请问此人原来的位置是多少号?
输入格式:测试数据有多组,处理到文件尾。每组测试输入一个整数n(5≤n≤100)。
输出格式:对于每组测试,输出最后剩下那个人的编号。
输入样例:123102869
输出样例:12342368
代码:12345678910111213141516171819202122232425262728293031323334C++#include<bits/stdc++.h>using namespace std;int main(){ int n; while(cin >> n){ int a[1001] = {0}; int m; m = 3; int count = 0;//记录退出人数 int k = -1;//这里假定开始为第一个人,下标 ...
1-4 绩点计算
某大学的GPA(绩点)计算规则如下:
课程百分制成绩90分对应绩点4.0,超过90分的,按90分计;如不足90分,则课程绩点 = 4.0 * 分数/90。学生综合绩点按该生已修的各门课程绩点结合学分加权平均而得。现有步步同学入学后的已修课程(共5门)成绩表如下,请编程计算其GPA。
输入格式:第1门课程百分制分数 学分
第2门课程百分制分数 学分
第3门课程分制分数 学分
第4门课程百分制分数 学分
第5门课程百分制分数 学分
说明:百分制分数和学分均为整数。
输出格式:请参考输出样例。其中,GPA值保留两位小数。
输入样例:1234578 391 565 495 360 2
输出样例:1GPA:3.49
代码:1234567891011121314151617181920212223C++#include<bits/stdc++.h>using namespace std;int main(){ float grade[5],credit[5],gpa[5]; float gpa1,gpa2; gpa1 = 0; ...
1-3 英文字母
在计算机内部,英文字母依ASCII码分别由连续的整数来表示。比如,大写的英文字母A的ASCII码值为65,B的码值为66,然后依次递增,Z的码值为90。
请编程计算:
从键盘读取大写字母Q(代号,其值由具体输入确定),请问Q所代表的大写字母是字母表中的第几个字母(从1开始计数,即A为第1个字母)?从键盘读取整数N,求字母表中的第N个字母(从1开始计数)是什么?
输入格式:QN
说明:是一个字符的大写字母;N的取值范围为1~26。
输出格式:请参考输出样例。
输入样例:12B3
输出样例:122C
代码:12345678910111213C++#include<bits/stdc++.h>using namespace std;int main(){ char q; int n; cin >> q; cin >> n; cout << (int)q - 64 << endl; cout << (char)(n + 64); return 0;} ...
1-6 书号判断与纠错
图书都有唯一的ISBN码(书号)标识,ISBN分为10位和13位两种。对于10位的ISBN码,包含9位数字和1位校验码,其格式如“a-bcd-efghi-j”,其中符号“-”是分隔符,字母a,b,……,i代表0,1,……,9中的某位数字,最后一位是校验码(可以为0,1,……,9中的某位数字,也可以是大写字母X)。对于格式为“a-bcd-efghi-j”的书号,校验码的计算方法如下(参考自百度百科):将去掉校验码后得到的9位数字依序分别乘以从10,9,8,……,3,2,将其乘积相加得到累加和sum,求余数r=sum%11;若r=0,则校验码为0;否则求11与r的差数d=11-r,若d=10,则以“X”来表示校验码,否则校验码为d。即:sum=a×10+b×9+c×8+d×7+e×6+f×5+g×4+h×3+i×2,r=sum % 11,若r为0,则校验码为0,否则d=11-r,若d=10,则校验码为大写字母X,否则校验码为d。
例如,对于书号:7-302-56474-4,有sum=7×10+3×9+0×8+2×7+5×6+6×5+4×4+7×3+4×2=216,r=216 % 11=7, ...