南投县网站建设_网站建设公司_Python_seo优化
2026/1/11 19:01:16 网站建设 项目流程

2025年中山大学计算机考研复试机试真题

2025年中山大学计算机考研复试上机真题

历年中山大学计算机考研复试上机真题

历年中山大学计算机考研复试机试真题

更多学校完整题目开源地址:https://gitcode.com/u014339447/pgcode

百度一下pgcode即可查看,输入 “学校名称” 即可筛选该校历年机试真题,包括真题、ac代码、解题思路、视频讲解。

前缀字符串-中山大学

题目描述

如果一个字符串 $ s1 $ 是由另一个字符串 $ s2 $ 的前面部分连续字符组成的,那么我们就说 $ s1 $ 就是 $ s2 $ 的前缀。

比如 $ ac $ 是 $ acm $ 的前缀,$ abcd $ 是 $ abcddfasf $ 的前缀,特别的 $ kdfa $ 是 $ kdfa $ 的前缀。

现在给你一些字符串,你的任务就是从这些字符串中找出一些字符串放到一个集合中,使得这个集合中任意一个字符串不是其他字符串的前缀,并且要使集合里的字符串尽可能的多。

输出这个集合中字符串的个数。

输入格式

有多组测试数据。

每组测试数据以一个整数 $ n $ 开头,随后有 $ n $ 个字符串。

当 $ n=0 $ 时表示输入结束。

$ 0 < n < 100 $,字符串长度不大于 $ 20 $。

输出格式

每组测试数据输出一个整数,即所求的最大值。

每组数据占一行。

输入样例
6 acm yuou yuoufsdaf acmmmdf acmm fdsf 0
输出样例
3
importjava.util.*;publicclassMain{publicstaticvoidmain(String[]args){Scannersc=newScanner(System.in);while(true){intn=sc.nextInt();if(n==0)break;String[]strings=newString[n];for(inti=0;i<n;i++){strings[i]=sc.next();}// 按长度排序,短的在前Arrays.sort(strings,(a,b)->a.length()-b.length());Set<String>result=newHashSet<>();for(Strings:strings){booleancanAdd=true;// 检查当前字符串是否是已有字符串的前缀for(Stringexisting:result){if(s.startsWith(existing)){canAdd=false;break;}}if(canAdd){result.add(s);}}System.out.println(result.size());}sc.close();}}

统计二进制数中的 1 的个数-中山大学

题目描述

整数在计算机中使用二进制的形式表示,如整数7 77用二进制表示为:111 111111,其中1 11的个数为3 33

输入格式

输入一个整数

输出格式

输出该整数用二进制表示时,其中1 11的个数

输入样例
7
输出样例
3
#include<iostream>#include<bitset>#include<string>#include<algorithm>usingnamespacestd;intmain(){inta=0;intcount=0;intb=0;scanf("%d",&b);for(a=0;a<32;a++){if((b>>a)&1){count++;}}printf("%d",count);return0;}

最长连号-中山大学

题目描述

输入n nn个正整数,(1 ≤ n ≤ 10000 1 \leq n \leq 100001n10000),要求输出最长的连号的长度。

(连号指从小到大连续自然数)

输入格式

第一行,一个数n nn

第二行,n nn个正整数,之间用空格隔开。

输出格式

一个数,最长连号的个数。

输入样例
10 3 5 6 2 3 4 5 6 8 9
输出样例
5
#include<iostream>usingnamespacestd;intmain(){intn=0;cin>>n;inta[n];for(inti=0;i<n;i++){scanf("%d",&a[i]);}intans=0;for(inti=0;i<n;i++){intmax=0;for(intj=i;j<n;j++){if(j!=i){if((a[j]-1)==a[j-1]){max++;//满足条件,max++}else{break;//不满足条件,立刻退出循环}}else{max++;//连号是可以为1的,所以要max++}}if(max>ans){ans=max;}}cout<<ans;}

最小生成树-中山大学

题目描述

如题,给出一个无向图,求出最小生成树,如果该图不连通,则输出 $ orz $。

输入格式

第一行包含两个整数 $ N $, $ M $,表示该图共有 $ N $ 个结点和 $ M $ 条无向边。

接下来 $ M $ 行每行包含三个整数 $ X_i $, $ Y_i $, $ Z_i $,表示有一条长度为 $ Z_i $ 的无向边连接结点 $ X_i $, $ Y_i $。

$ 1 \leq N \leq 5000, ,1 \leq M \leq 2 \times 10^5 $。

输出格式

如果该图连通,则输出一个整数表示最小生成树的各边的长度之和。

如果该图不连通则输出 $ orz $。

输入样例
4 5 1 2 2 1 3 2 1 4 3 2 3 4 3 4 3
输出样例
7
#include<bits/stdc++.h>usingnamespacestd;constintN=5010,M=200010;structEdge{intu,v,w;booloperator<(Edge&o){returnw<o.w;}}s[M];intn,m;intf[N];intfind(intx){returnx==f[x]?x:f[x]=find(f[x]);}intmain(){while(cin>>n>>m){for(inti=1;i<=m;++i)cin>>s[i].u>>s[i].v>>s[i].w;sort(s+1,s+m+1);for(inti=1;i<=n;++i)f[i]=i;intans=0,cnt=0;for(inti=1;i<=m;++i){intfu=find(s[i].u),fv=find(s[i].v);if(fu!=fv){f[fu]=fv;ans+=s[i].w;cnt++;if(cnt==n-1)break;}}if(cnt==n-1)cout<<ans<<endl;elsecout<<"orz"<<endl;}return0;}
if (fu != fv) { f[fu] = fv; ans += s[i].w; cnt++; if (cnt == n - 1) break; } } if (cnt == n - 1) cout << ans << endl; else cout << "orz" << endl; } return 0;

}

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询