上机复试练习day2(杭州电子科技大学&华东师范大学 2022.03.02)

杭州电子科技大学&华东师范大学 上机题目

第一题:关羽闯关

要求:关羽过关斩3将,关羽的武力值为x,敌人的武力值为y,如果满足(x-y)^2+x-y+41如果为素数则关羽获胜,如果3次全部获胜则输出WIN,失败者输出失败的关号。

输入格式:

关羽武力值x
将领1y
将领2y
将领3y

输出格式:

WIN或者失败关号

思路:

写一个素数鉴别的函数和一个武力值比较函数,注意头文件math.h(有开根函数)

#include <stdio.h>
#include <math.h>

int wulizhi(int x,int y){
    int num=x-y;
    return num*num+num+41;
}
bool isprime(int num){//快速判断是不是质数
    if(num<=3){
        return num>1;
    }//不在6的倍数两侧的一定不是质数
    if(num%6!=1&&num&&6!=5){
        return false;
    }
    for(int i=5;i<=sqrt(num);i+=6){
        if(num%i=0||(num)%(i+2)==0){
            return false;
        }
    }
    return true;
}

int main(){
    int guan,em[4],lose=0;
    scanf("%d",&guan);
    for(int i=1;i<=3;i++){
        scanf("%d \n",em[i];)
    }
    for(int i=1;i<=3;i++){
        if(isprime(wulizhi(em[i]))){
            continue;
        }
        else
        {
            lose=i;
            printf("lost to the Np.%d enemy",lose);
        }
    }
    if(lose==0) printf("WIN");//lose没变 等于没输,赢麻
    return 0;
}
复制代码

第二题:资本家模拟器

要求:输入N个员工,每个员工ID号,上班时间,下班时间,第一行输出最早去公司的员工的ID,第二行输出最晚走的员工的id,最后一行输出工作最久员工的ID。

输入格式:

第一行输入N表示有个N个员工,在接下来的N行,依次输入员工的ID,上班时间,下班时间。

输出格式:

输出上述要求的3个员工

思路:

创建一个结构体,包含员工的信息。然后写3个不同的cmp,然后利用3个sort函数进行排序。

#include <stdio.h>

struct person{
    char id;
    int ts=0,te=0;
    int worktime;
}people[1001];
bool cmps(person a,person b){//最早上班
    return a.ts<b.ts;
}
bool cmpe(person a,person b){//最晚下班
    return a.te>b.te;
}
bool cmpl(person a,person b){//上班时间最久
    return a.worktime>b.worktime;
}

int main(){
    int N;
    scanf("%d",&N);
    for(int i=0;i<N;i++){
        int tsh,tsm,tss,teh,tem,tes;
        scanf("%c",&people[i+1].ID);
        scanf("%d:%d:%d  %d:%d:%d",&tsh,&tsm,&tss,&teh,&tem,&tes);
        people[i+1].ts=tsh*3600+tsm*60+tss;
        people[i+1].te=tsh*3600+tsm*60+tss;
        people[i+1].worktime=people[i+1].te-people[i+1].ts;
    }
    sort(people[1].tsh,people[N].tsh,cmps);
    printf("%c\n",people[1].id);
    sort(people[1].teh,people[N].teh,cmpe);
    printf("%c\n",people[1].id);
    sort(people[1].worktime,people[N].worktime,cmpl);
    printf("%c\n",people[N].id);
    return 0;
}
复制代码

第三题:算数器

要求:小学生都会算的1位数与1位数运算的代数式。

输入格式:

合法表达式

输出格式:

运算后的值

思路:

switch函数鉴别不同的运算符

#include <stdio.h>
#include <math.h>

int main(){
    int num1,num2;
    char ch;
    while(scanf("%d %c %d",&num1,&ch,&num2)!=EOF){
        switch(ch){
            case'+':
                printf("%d",num1+num2);
                break;
            case'-':
                printf("%d",num1-num2);
                break            
            case'*':
                printf("%d",num1*num2);
                break            
            case'/':
                printf("%d",num1/num2);
                break
        }
    }
    return 0;
}
复制代码

第四题:小组规模

要求:一个小组的成员只知道自己的组长是谁,二在同一个组领导下的成员不互相认识。现在这个团队希望有一个程序能统计一下个组长带领小组的规模,对每一个小组成员先真的自己及自己带领下的小组有多少人。

输入格式:

两行 第一行为N,代表小组的人数
第二行有N个数,每个数据表示第几个人的组长是几。团队的领导用0来表示,说明没有人做他的组长,数据保证么有环路。单独的一个成员视为1个人的小组。

输出格式:

1行 N个数字u,表示第i个成员的规模

思路:

首先寻找父节点,然后依次打印

#include <stdio.h>
#include <math.h>

int main(){
    int N;
    scanf("%d",&N);
    int count[300],a[300];
    for(int i=1;i<=N;i++){
        scanf("%d ",&a[i]);
    }
    for(int i=1;i<N;i++){
        if(a[i]==0){
            continue;
        }
        else{
            int k=i;//核心代码
            while(a[k]!=0){//向上遍历,寻找父节点
                int j=a[k];
                count[j]++;
                k=j;
            }
        }
    }
    for(int i=1;i<N;i++){
        printf("%d",count[i]);
    }
    printf("%d",count[N]);
    return 0;
}

复制代码

参考书目

1.计算机软件相关专业复试指导 ————皮皮灰

2.2022年数据结构考研复试指导 ————王道论坛

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享