西安电子科技大学2018考研复试计算机类上机试题总结

根据回忆整理的复试上机题型,有意向报考西电计算机专业的同学可以试试做下。

第一题:

/*问题描述:最近很火的微信游戏跳一跳游戏规则如下:短跳得1分,跌落游戏结束,长跳得2分,并且长跳可连续累加,第一次2分,第二次4分,依次类推,若长中断则重新计分2分。
现给定0,1,2的组合序列,其中0:跌落 1:短跳成功 2:长跳成功
请你计算玩家当次游戏的合计得分。

输入格式:首先输入一个数字n代表当前游戏状态变化数,接着输入n个由0,1,2组合的数字,0代表结束。

输出格式:输出玩家当次游戏得分。

输入案例:
6
1 2 2 1 2 0
输出结果:10

*/

//思路:该题为基础题,只需要对长跳进行记录即可,累加计算得分,可设置变量存放上一跳状态,与连跳次数

#include<iostream>
using namespace std;

int main()
{
    int n;
    while(cin>>n)
    {
        int ans=0,last=0,c=1;
        for(int i=0;i<n;i++)
        {
            int tmp;
            cin>>tmp;
            if(tmp==0) // 结束 
                break;
            if(tmp==1)  // 短跳 
            {
                    ans+=1;
                    c=1;
            }
            if(tmp==2)
            {
                if(last==2) // 连续长跳 
                {
                    ans+=2*c;
                    c++;
                }
                else        // 单次长跳 
                {
                    ans+=2;
                    c++;
                }
            }
            last=tmp; //保存上一跳 
        }
        cout<<ans<<endl;
    }
    return 0;
}

第二题:

/* 最长连续公共子序列LCS
问题描述:输入两个字符串s1,s2,设s1长度为a,s2长度为b,s1与s2的最长公共子串长度为c,定义公共因子
d=c/(a+b),要求求得d并输出,结果保留两位小数

输入格式:输入两个字符串s1,s2,长度不大于100,以空格隔开
输出格式:输出公共因子d,结果保留两位小数

输入案例:
abcde abgde
输出案例:
0.20

两字符串具有连续公共子序列ab,c=2,a=b=5,于是有d=c/(a+b)=2/10=0.20

思路:解决此类公共子序列典型解题方法就是使用动态规划

*/

#define MAX 101
#define GMax(x,y) x>y?x:y
#include<iostream>
#include<iomanip>
#include<string.h>
using namespace std;

// dp数组 
int dp[MAX][MAX];

int main()
{
    char str1[MAX];
    char str2[MAX];
    gets(str1);
    gets(str2);
    int a=strlen(str1);
    int b=strlen(str2);
    int max_len=0; // 最大长度
    // 初始化序列 
    for(int i=0;i<=a;i++)
        dp[i][0]=0;
    for(int j=0;j<=b;j++)
        dp[0][j]=0;
    // 注意这里不需要计算到dp[a][b],因为str[a]=str[b],长度会多加1 
    // 递推动态规划 
    for(int i=1;i<a;i++)
        for(int j=1;j<b;j++)
        {
            if(str1[i]==str2[j])
                {
                    dp[i][j]=dp[i-1][j-1]+1;
                    // 更新最大长度
                    if(dp[i][j]>max_len)
                        max_len=dp[i][j];   
                }
            else
            // 非连续写法 
            //  dp[i][j]=GMax(dp[i-1][j],dp[i][j-1]);   
            //连续写法 重新计数 
                dp[i][j]=0;

        }   
    int c=max_len;
    float ans=(float)c/(a+b);
    //规格化输出 
    cout<<c<<endl;
    cout<<setprecision(2)<<ans<<endl;
    return 0;

} 

第三题:

/* 面积涂色问题

描述:已知根据矩形的左下角右上角左边可以唯一确定一个矩形位置,给出多个矩形坐标对其面积单元进行涂色
其中重叠面积只涂一次,求涂色面积单元个数。

输入格式:首先输入涂色矩形个数n(n<100),接着分别输入每个矩形的左下角与右上角左边(0<=x<=100
0<=y<=100),按行分隔

输出格式:输出涂色面积单元个数

输入样例:
2
1 1 4 5
2 3 5 6

输出样例:
17

*/

//思路:由于坐标范围为0<=x<=100,0<=y<=100,共计10000个面积单元,不大,可直接使用二维数组存储单元涂色情况
// 使用(1,1)代表第一个单元,(i,j)代表第i行第j列个单元 ,即使用单元格右上角左边来代表单元
//其中 (0,0) 不适用 
#define MAX 101
#include<iostream>
using namespace std;
typedef struct Point
{
    int x,y;
}Point; 

typedef struct Rect
{
    Point p1,p2; // 左下角与右上角左标 
}Rect;

int A[MAX][MAX]; // 全局单元矩阵 
Rect R[MAX];    // 矩形数组 
int main()
{
    int n;
    while(cin>>n)
    {
        // 初始化单元矩阵 
        for(int i=0;i<MAX;i++)
            for(int j=0;j<MAX;j++)
                A[i][j]=0;
        // 输入矩形 
        for(int i=0;i<n;i++)
            cin>>R[i].p1.x>>R[i].p1.y>>R[i].p2.x>>R[i].p2.y;
        //面积单元涂色
        for(int i=0;i<n;i++)
            for(int j=R[i].p1.x+1;j<=R[i].p2.x;j++)
                for(int k=R[i].p1.y+1;k<=R[i].p2.y;k++)
                {
                    //如果未涂色,则涂色 
                    if(A[j][k]==0)
                        A[j][k]=1;  
                }       
        // 遍历涂色单元个数
        int ans=0;
        for(int i=0;i<MAX;i++)
            for(int j=0;j<MAX;j++)
            {
                // 单元已涂色,则加一 
                if(A[i][j])
                    ans++;  
            } 
        cout<<ans<<endl;
    }
    return 0;
}

第四题:
/* 多关键字排序

描述: 给定一组记录n(n<100)小明各个时期的考试成绩 ,格式为日期+成绩,中间以空格隔开,记录之间
分行输入 ,例如
2008/6/3 80
2009/1/1 56
….
其中日期输入要求年份1996-2100 月份1-12 日期1-31

现要求以分数为关键字从大到1小对其进行排序,若分数相同则按日期从小到大排序

输入样例
4
2017/1/1 95
2017/6/10 85
2017/3/2 95
2017/1/1 65

输出样例
2017/1/1 95
2017/3/2 95
2017/6/10 85
2017/1/1 65

思路:这是一个典型的多关键字排序问题,可建立恰当结构体,利用stl自带的排序算法实现快速解题

*/

 #define MAX 100
 #define IsLeap(x) x%4==0&&x%100!=0 ||x%400==0 
 #include<iostream>
 #include<algorithm>
 using namespace std;

 //月份日期对应表 
 int Day[13]={
 0,31,28,31,30,31,30,31,31,30,31,30,31
 };
 //记录结构体 
 typedef struct 
 {
    char date[100];
    int grade;
 }Record;
 //自定义排序规则 
 bool cmp(Record x,Record y)
 {
    if(x.grade!=y.grade)
        return x.grade>y.grade;
    return x.date<y.date;
 }
 //日期有效性检测 
 bool isValid(char* str)
 {
    int y,m,d;
    int dd;//二月天数 
    bool valid=true;
    sscanf(str,"%d/%d/%d",&y,&m,&d);
    if(y<1996||y>2100)
        valid=false;
    if(m<1||m>12)
        valid=false;
    if(IsLeap(y)&&m==2) //闰年加1 
        dd=Day[m]+1;
    else
        dd=Day[m];
    if(d<1||d>Day[m])
        valid=false; 
    return valid;
 } 

 int main()
 {  // 记录数组 
    Record res[MAX];
    bool flag[MAX];
    int n;
    while(cin>>n)
    {
        //有效数组初始化 
        for(int i=0;i<n;i++)
            flag[i]=true;
        // 输入记录 
        for(int i=0;i<n;i++)
            cin>>res[i].date>>res[i].grade; 
        // 根据自定义排序规则排序  
        sort(res,res+n,cmp);
        // 格式化输出,过滤掉无效日期 
        for(int i=0;i<n;i++)
        {
            if(isValid(res[i].date))
                cout<<res[i].date<<" "<<res[i].grade<<endl;
        }

    }

    return 0;

总结:上级考试时间为1个半小时,4道编程题,其中第二题偏难,最后一题代码量偏大,需对输入数据进行特殊处理。总体来讲,没有考特别难的算法,需要多加练习基础编程题。注意把握时间,先做容易拿分的题。

  • 19
    点赞
  • 96
    收藏
    觉得还不错? 一键收藏
  • 13
    评论
### 回答1: 华南理工2018考研复试c 上机主要包括两个方面的考试内容:算法题和编程题。 首先是算法题,考核学生对算法思想与方法的理解和运用能力。通常会涉及到经典的算法问题,如排序算法、背包问题、图算法等。学生需要理解问题的要求,设计算法解决问题,并通过编写代码实现算法。算法题主要考察学生对算法的理解和掌握程度,以及解决实际问题的能力。 其次是编程题,主要考察学生的程序设计能力。学生需要根据题目要求,使用编程语言(如C或C++)编写代码,实现相应的功能。常见的编程题有字符串处理、数据结构操作等。在编程题中,学生需要熟练掌握编程语言的语法和常用数据结构,能够合理地利用编程语言的特性进行程序设计,实现想要的功能。 参加华南理工2018考研复试c 上机考试需要学生具备扎实的计算机基础知识和编程能力。平时应多加练习,参加算法和编程训练,提高解决问题的能力。考试前应深入复习算法和数据结构,并熟悉常用的编程语言。在考试中,要注意合理分配时间,先从简单题目入手,争取用最短的时间获取更多的分数。 最后,准备好心态,保持冷静和自信。相信通过充分的准备和努力,一定能够顺利完成华南理工2018考研复试c 上机部分,取得好的成绩。 ### 回答2: 华南理工2018考研复试c 上机主要是指计算机科学与技术专业的上机实验环节。在这个阶段,考生需要利用计算机完成一些实际的计算机科学与技术问题,以检验其综合应用能力和解决问题的能力。 对于考生来说,参加华南理工的考研复试c 上机一个很重要的环节。在这个环节中,考生需要根据题目的要求,设计并编写相应的程序来解决实际问题。这不仅考验了考生的编程能力,还需要考生将所学的理论知识应用到实际中,检验其对计算机科学与技术的理解和掌握程度。 在上机过程中,考生需要熟悉并运用一些常见的编程语言和工具,例如C语言、Java等,并了解各种常见的数据结构和算法,如数组、链表、栈、队列、图等。同时,对于一些常见的计算机科学与技术问题,如排序、查找等,考生需要熟练地编写相应的程序。 总之,华南理工2018考研复试c 上机是检验考生计算机科学与技术综合能力的重要环节。考生需要在规定时间内,通过设计并编写合适的程序,解决给定的问题。通过这个环节,考官可以评估考生的编程技巧、综合应用能力和解决问题的能力,从而作出合理的录取决策。 ### 回答3: 华南理工大学2018考研复试中,计算机专业的上机环节主要考察考生的实际编程能力和解决问题的能力。上机考试的内容包括编程题和算法题两个方面。 在编程题部分,考题可能涉及到常用的数据结构和算法,例如数组操作、链表、栈、队列、树等。考生需要根据题目要求使用合适的数据结构和算法来实现相应的功能。编程题强调考生对编程语言的熟练掌握和代码的实现能力。 而在算法题部分,考题可能是一些经典的算法问题,例如排序算法、查找算法、图算法等。考生需要掌握常见的算法思想和解题技巧,灵活应用到具体问题中,并给出相应的代码实现。算法题重点考查考生的算法设计和问题解决能力。 在上机环节中,除了正确完成编程题和算法题外,还需要注意编程的效率和代码的可读性。考生需要注重代码的优化,使得程序在时间和空间上都能够满足要求。此外,代码的可读性也很重要,考生应该注重代码的命名规范、注释和结构清晰。 总之,华南理工大学2018考研复试上机环节是对考生实际编程能力和解决问题能力的综合考察。考生需要掌握基本的数据结构和算法知识,灵活应用到具体问题中,并注重编程效率和代码可读性的提升。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值