2025年暨南大学计算机考研复试机试真题
2025年暨南大学计算机考研复试上机真题
历年暨南大学计算机考研复试上机真题
历年暨南大学计算机考研复试机试真题
更多学校完整题目开源地址:https://gitcode.com/u014339447/pgcode
百度一下pgcode即可查看,输入 “学校名称” 即可筛选该校历年机试真题,包括真题、ac代码、解题思路、视频讲解。
体重排序-暨南大学
输入 $ n $ 个姓名和这个人对应的体重,输出体重从小到大的名字。
如果体重相同,按字典序先后输出名字。
数据范围
0≤n≤10000输入样例
4 Li 50.12 Ming 43.12 Dan 75 Tia 43.12输出样例
Ming Tia Li Dan#include<stdio.h>#defineMAX_SIZE100intmain(){intn;scanf("%d",&n);charname[MAX_SIZE][50];doublescore[MAX_SIZE];for(inti=0;i<n;i++){scanf("%s %lf",name[i],&score[i]);}// 排序for(inti=0;i<n-1;i++){for(intj=0;j<n-1-i;j++){intchange=0;// 按体重升序if(score[j]>score[j+1]){change=1;}// 体重相同按名字字典序elseif(score[j]==score[j+1]){intk=0;while(name[j][k]!='\0'&&name[j+1][k]!='\0'){if(name[j][k]>name[j+1][k]){change=1;break;}elseif(name[j][k]<name[j+1][k]){break;}k++;}}// 交换if(change){doublet_score=score[j];score[j]=score[j+1];score[j+1]=t_score;chart_name[50];intk=0;while((t_name[k]=name[j][k])!='\0')k++;k=0;while((name[j][k]=name[j+1][k])!='\0')k++;k=0;while((name[j+1][k]=t_name[k])!='\0')k++;}}}for(inti=0;i<n;i++){printf("%s",name[i]);if(i!=n-1)printf(" ");}return0;}二元素数组-暨南大学
输入一个数n nn,输出其所有相加为n nn的二元素数组?
对于每一组,小数在前,大数在后。
数据范围
0≤n≤10000输入样例
100输出样例
3 97 11 89 17 83 29 71 41 59 47 53#include<stdio.h>#include<math.h>//判断是否是素数intissu(intn){if(n<=1)return0;if(n==2)return1;if(n%2==0)return0;for(inti=3;i*i<=n;i+=2){//只检查奇数if(n%i==0)return0;//有因子的话肯定有小于根号n的}return1;}intmain(){intn;scanf("%d",&n);inta=n/2;for(inti=1;i<=a;i++){if(issu(i)&&issu(n-i))printf("%d %d\n",i,n-i);}return0;}逆序对的数量-暨南大学
给定一个长度为n nn的整数数列,请你计算数列中的逆序对的数量。
逆序对的定义如下: 对于数列的第i ii个和第j jj个元素,如果满足i < j i < ji<j且a [ i ] > a [ j ] a[i] > a[j]a[i]>a[j],则其为一个逆序对;否则不是。
输入格式
第一行包含整数n nn,表示数列的长度。
第二行包含n nn个整数,表示整个数列。
输出格式
输出一个整数,表示逆序对的个数。
数据范围
1 < n < 100000 1 < n < 1000001<n<100000
数列中的元素的取值范围[ 1 , 10 9 ] [1,10^9][1,109]
输入样例:
6 2 3 4 5 6 1输出样例:
5#include<stdio.h>#include<math.h>#defineMAX_SIZE100000//求逆序数intnixushu(inta[],intn){intcount=0;for(inti=0;i<n;i++){for(intj=i;j<n;j++){if(a[j]<a[i])count++;}}returncount;}intmain(){intn;scanf("%d",&n);inta[MAX_SIZE];inti=0;while(i<n&&scanf("%d",&a[i])==1){i++;}printf("%d",nixushu(a,n));}删除区间-暨南大学
给定 $ n $ 个闭区间 $ [a,b] $,请你在数轴上删除若干区间,使得选中的区间之间互不相交(包括端点)。
输出至少需要删除区间的数量。
输入格式
第一行包含整数 $ n $,表示区间数。
接下来 $ n $ 行,每行包含两个整数 $ a, ,,b $,表示一个区间的两个端点。
输出格式
输出一个整数,表示需要删除的区间数量。
数据范围
$ 1 \leq n \leq 10^5 $
$ -10^9 \leq a \leq b \leq 10^9 $
输入样例:
3 -1 1 2 4 3 5输出样例:
1#include<iostream>#include<vector>#include<algorithm>usingnamespacestd;// 按区间右端点升序排序boolcmp(constpair<int,int>&a,constpair<int,int>&b){returna.second<b.second;}intmain(){intn;cin>>n;vector<pair<int,int>>intervals(n);for(inti=0;i<n;++i){cin>>intervals[i].first>>intervals[i].second;}// 按右端点排序sort(intervals.begin(),intervals.end(),cmp);intcount=1;// 至少能选1个区间intlast_end=intervals[0].second;for(inti=1;i<n;++i){// 当前区间左端点 > 最后选中区间的右端点,说明不相交if(intervals[i].first>last_end){count++;last_end=intervals[i].second;}}// 至少删除的数量 = 总区间数 - 最多选中的不相交区间数cout<<n-count<<endl;return0;}