历年浙江工商大学计算机考研复试机试真题(解题思路 + AC 代码)
2025年浙江工商大学计算机考研复试机试真题
2025年浙江工商大学计算机考研复试上机真题
历年浙江工商大学计算机考研复试上机真题
历年浙江工商大学计算机考研复试机试真题
更多学校完整题目开源地址:https://gitcode.com/u014339447/pgcode
百度一下pgcode 即可查看,输入 “学校名称” 即可筛选该校历年机试真题,包括真题、ac代码、解题思路、视频讲解。

跳跃游戏-浙江工商大学
题目描述
给定一个非负整数数组 n u m s nums nums,你最初位于数组的第一个位置。数组中的每个元素代表你在该位置可以跳跃的最大长度。你的目标是使用最少的跳跃次数到达数组的最后一个位置。假设你总是可以到达数组的最后一个位置。
输入格式
第一行包含一个整数 n n n,表示数组的长度。
第二行包含 n n n 个非负整数,表示数组 n u m s nums nums。
输出格式
输出一个整数,表示到达最后一个位置的最少跳跃次数。如果无法到达最后一个位置,则输出 − 1 -1 −1。
数据范围
1 ≤ n ≤ 10 5 1 \le n \le 10^5 1≤n≤105
0 ≤ n u m s [ i ] ≤ 10 5 0 \le nums[i] \le 10^5 0≤nums[i]≤105
输入样例
5
2 3 1 1 4
输出样例
2
#include<iostream>
#include<climits>
using namespace std;
int main(void){
int n;
cin >> n ;
int nums[n];
for(int i=0;i<n;i++){
cin >> nums[i];
}
//处理特殊情况
if(n>1 && nums[0]==0){
cout << "-1" ;
return 0;
}else if(n==1){
cout << "0" ;
return 0;
}
int D[n];//D[i]表示从0位置到i位置的最小跳数
for(int i=1;i<n;i++)
D[i]=INT_MAX;
D[0]=0;
for(int i=1;i<n;i++){
for(int j=0;j<i;j++){
int d=nums[j];//以j为跳板的最大跳跃长度
if(d>=(i-j)){//以j为跳板可以到达j
if(D[i]>(D[j]+1) && D[j]!=INT_MAX)
D[i]=D[j]+1;
}
}
}
if(D[n-1]<INT_MAX)
cout << D[n-1] ;
else
cout << "-1" ;
return 0;
}
最大差值-浙江工商大学
题目描述
给定一个长度为 n n n 的整数序列 a 1 , a 2 , . . . , a n a_1, a_2, ..., a_n a1,a2,...,an。定义 l e f t left left 为序列前缀 a 1 , a 2 , . . . , a i a_1, a_2, ..., a_i a1,a2,...,ai 中的最大值, r i g h t right right 为序列后缀 a i , a i + 1 , . . . , a n a_i, a_{i+1}, ..., a_n ai,ai+1,...,an 中的最大值。对于每个位置 i i i,计算 ∣ l e f t − r i g h t ∣ |left - right| ∣left−right∣ 的值。请找出所有 i i i 对应的 ∣ l e f t − r i g h t ∣ |left - right| ∣left−right∣ 中的最大值。
输入格式
第一行包含一个整数 n n n,表示序列的长度。
第二行包含 n n n 个整数 a 1 , a 2 , . . . , a n a_1, a_2, ..., a_n a1,a2,...,an,表示给定的序列。
输出格式
输出一个整数,表示所有 i i i 对应的 ∣ l e f t − r i g h t ∣ |left - right| ∣left−right∣ 中的最大值。
数据范围
1 ≤ n ≤ 10 5 1 \le n \le 10^5 1≤n≤105
− 10 9 ≤ a i ≤ 10 9 -10^9 \le a_i \le 10^9 −109≤ai≤109
输入样例
5
1 2 3 4 5
输出样例
4
#include <bits/stdc++.h>
#include <cmath>
#include <iomanip>
#include <iostream>
using namespace std;
int n;
vector <pair<int,int>> g[100005];//邻接表存树
long long mx=0;//根节点到叶节点的最长路径
long long sum=0;//所有路径和
//深搜u为当前节点,f为父节点,d为根节点到当前节点路径长
void dfs(int u,int f,long long d){
mx=max(mx,d);//取路径长最大值
for(int i=0;i<g[u].size();i++){//遍历所有子节点
int v=g[u][i].first;//子节点
if (v!=f){//不是父节点
dfs(v,u,d+g[u][i].second);//继续深搜
}
}
}
int main() {
double n;
int a[100];
cin>>n;
for(int i=0;i<n;i++){
cin>>a[i];
}
for(int i=0;i<n;i++){
int max1=-99999,max2=-99999;
for(int j=0;j<=i;j++){
if(a[j]>max1)
max1=a[j];
}
// cout<<max1<<' ';
for(int k=i;k<n;k++){
if(a[k]>max2)
max2=a[k];
}
// cout<<max2<<endl;
if(sum<max2-max1)
sum=max2-max1;
if(sum<max1-max2)
sum=max1-max2;
}
cout<<sum;
}
空心直角三角形-浙江工商大学
题目描述
在 n × n n \times n n×n $ 的字符矩阵中,绘制两个共底的空心直角三角形。两个三角形底边重合于矩阵的最后一行,并且关于矩阵的垂直中线对称。三角形的边界由星号 * 构成,内部为空格。矩阵的其他位置也用空格填充。
输入格式
输入包含多组测试数据。每组数据占一行,包含一个整数 n n n,表示矩阵的大小。
输出格式
对于每组输入,输出对应的图形。每组输出之后输出一个空行。
数据范围
3 ≤ n ≤ 100 3 \le n \le 100 3≤n≤100
输入样例
5
输出样例
* *
** **
* * *
** **
*****
#include <iostream>
#include <vector>
using namespace std;
int main() {
int n;
// 循环读取多组测试数据
while (cin >> n) {
// 创建一个 n x n 的字符矩阵,初始化为空格
vector<vector<char>> matrix(n, vector<char>(n, ' '));
// 绘制两个对称的空心直角三角形
for (int i = 0; i < n; i++) {
// 左三角形:从第一列开始到对角线位置
matrix[i][i] = '*'; // 左三角形的斜边
matrix[i][0] = '*'; // 左三角形的垂直边
// 右三角形:从最后一列开始到对角线位置
matrix[i][n - 1 - i] = '*'; // 右三角形的斜边
matrix[i][n - 1] = '*'; // 右三角形的垂直边
}
// 绘制底边(最后一行全部为星号)
for (int j = 0; j < n; j++) {
matrix[n - 1][j] = '*';
}
// 输出矩阵
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
cout << matrix[i][j];
}
cout << endl;
}
// 每组输出后输出一个空行
cout << endl;
}
return 0;
}
直线上的点-浙江工商大学
题目描述
给定一条直线 L L L,它由两个点 ( x 1 , y 1 ) (x_1, y_1) (x1,y1) 和 ( x 2 , y 2 ) (x_2, y_2) (x2,y2) 确定。接着给定 n n n 个点 ( x i , y i ) (x_i, y_i) (xi,yi),请计算这 n n n 个点中有多少个点位于直线 L L L 上。
输入格式
输入包含多行。
第一行包含四个整数 x 1 x_1 x1, y 1 y_1 y1, x 2 x_2 x2, y 2 y_2 y2,表示确定直线的两个点。
第二行包含一个整数 n n n,表示接下来点的个数。
接下来 n n n 行,每行包含两个整数 x i x_i xi, y i y_i yi,表示一个点的坐标。
输出格式
输出一个整数,表示位于直线 L L L 上的点的个数。
数据范围
− 10 9 ≤ x 1 , y 1 , x 2 , y 2 , x i , y i ≤ 10 9 -10^9 \le x_1, y_1, x_2, y_2, x_i, y_i \le 10^9 −109≤x1,y1,x2,y2,xi,yi≤109, 1 ≤ n ≤ 1000 1 \le n \le 1000 1≤n≤1000。
输入保证直线由两个不同的点确定,即 ( x 1 , y 1 ) ≠ ( x 2 , y 2 ) (x_1, y_1) \ne (x_2, y_2) (x1,y1)=(x2,y2)。
输入样例
0 0 1 1
5
0 0
1 1
2 2
3 4
-1 -1
输出样例
4
#include<iostream>
using namespace std;
int main(void){
int x1,y1,x2,y2;
cin >> x1 >> y1 >> x2 >> y2 ;
//直线有三种情况,1.垂直x轴,2.垂直y轴,3.其他(斜)
int a=0,b=0;//斜率,截距
int flag=0;
if(x1==x2 && y1!=y2)
flag=1;
else if(x1!=x2 && y1==y2)
flag=2;
else{
flag=3;
//计算直线方程的参数
a=1.0*(y2-y1)/(x2-x1);//斜率
b=y1-a*x1;//截距
//方程为y=ax+b;
}
//计算点是否在直线上
int n;
cin >> n;
int count=0;//直线上点的数量
for(int i=0;i<n;i++){
int x,y;
cin >> x >> y ;
if(flag==1){
if(x==x1)
count++;
}else if(flag==2){
if(y==y1)
count++;
}else if(flag==3){
if(y==(a*x+b))
count++;
}
}
printf("%d",count);
return 0;
}
{
int x,y;
cin >> x >> y ;
if(flag1){
if(xx1)
count++;
}else if(flag2){
if(yy1)
count++;
}else if(flag3){
if(y(a*x+b))
count++;
}
}
printf(“%d”,count);
return 0;
}
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐


所有评论(0)