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 1n105
0 ≤ n u m s [ i ] ≤ 10 5 0 \le nums[i] \le 10^5 0nums[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| leftright 的值。请找出所有 i i i 对应的 ∣ l e f t − r i g h t ∣ |left - right| leftright 中的最大值。

输入格式

第一行包含一个整数 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| leftright 中的最大值。

数据范围

1 ≤ n ≤ 10 5 1 \le n \le 10^5 1n105

− 10 9 ≤ a i ≤ 10 9 -10^9 \le a_i \le 10^9 109ai109

输入样例
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 3n100

输入样例
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 109x1,y1,x2,y2,xi,yi109 1 ≤ n ≤ 1000 1 \le n \le 1000 1n1000

输入保证直线由两个不同的点确定,即 ( 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(x
x1)
count++;
}else if(flag2){
if(y
y1)
count++;
}else if(flag3){
if(y
(a*x+b))
count++;
}
}
printf(“%d”,count);
return 0;

}


Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐