zoukankan      html  css  js  c++  java
  • 2017年杭电计算机研究生复试笔试题目

    //2017 N1
    /*关羽过关斩三将,输入四个人的武力值(大于0小于50),若超过界限需要重新输入,关羽的武力值x,将士武力值为y,满足(x-y)^2+(x-y)+41 若为素数则关羽获胜,若关羽三次获胜输出WIN,若失败则输出失败的将领序号(第几关)。*/
    #include<stdio.h>
    #include<math.h>
    int is_prime(int n)
    {
    int i;
    for ( i = 2; i <= sqrt(double(n)); i++)
    {
    if (n%i==0)
    {
    break;
    }
    }
    //假如是素数
    if (i>sqrt(double(n)))
    {
    return 1;
    }
    else
    {
    return 0;
    }
    }
    int main()
    {
    int x, y[4];
    int i;
    int sum = 0;
    while (~scanf("%d",&x))
    {
    for (i = 1; i < 4; i++)
    {
    scanf("%d", &y[i]);
    }
    for ( i = 1; i < 4; i++)
    {
    sum = (x-y[i]) *(x-y[i]) + (x - y[i]) + 41;
    //如果第三次也是素数
    if (is_prime(sum)&&i==3)
    {
    printf("WIN ");
    }
    //如果当前的sum不是素数,则就输出第几关,跳出循环
    else if (!is_prime(sum))
    {
    printf("第%d关 ",i);
    break;
    }
    //如果当前的sum是素数,则就继续
    else
    {
    continue;
    }
    }
    }
    return 0;
    }

    //N2
    /*输入N个员工,每个员工输出ID号,上班时间,下班时间,第一行输出最早去的员工的ID和上班时间第二行输出最迟走的员工的ID和下班时间第三行输出工作最久的员工的ID和上班时间(数据瞎编的)
    sampleinput:
    ID100001,07:00:0017:00:00
    ID100002,08:00:0018:00:00
    ID100003,09:00:0021:00:00
    sampleout:
    OPEN:ID100001,07:00:00
    CLOSE:ID100003,21:00:00
    (..):ID100003,12:00:00
    */
    #include<stdio.h>
    #include<algorithm>
    #define N 100
    typedef struct time
    {
    int hour;
    int min;
    int sec;
    }time;
    typedef struct Person
    {
    char id[N];
    struct time t1,t2;
    int worktime;
    }Person;
    Person p[N];
    //第一行:最早去的员工的ID和上班时间;
    //第二行:最迟走的员工的ID和下班时间;
    //第三行:输出工作最久的员工的ID和上班时间

    //比较员工的上班时间的早晚,得出上班时间早的,先比较小时,再比较分,最后比较秒,从高到底
    bool cmp1(const Person& p1,const Person& p2)
    {

    if (p1.t1.hour!=p2.t2.hour)
    {
    return p1.t1.hour < p2.t1.hour;
    }
    else if (p1.t1.min!=p2.t1.min)
    {
    return p1.t1.min < p2.t1.min;
    }
    else
    {
    return p1.t1.sec < p2.t1.sec;
    }
    }
    //比较员工的下班时间早晚,降序排序
    bool cmp2(const Person& p1, const Person& p2)
    {

    if (p1.t1.hour != p2.t2.hour)
    {
    return p1.t1.hour > p2.t1.hour;
    }
    else if (p1.t1.min != p2.t1.min)
    {
    return p1.t1.min > p2.t1.min;
    }
    else
    {
    return p1.t1.sec > p2.t1.sec;
    }
    }
    //求工作时间,还有一种简单直接的方法,就是全部转化为秒,再相减;下面的方法稍微麻烦
    int cal_work_time( Person& p1)
    {
    /*int sum=0,sum1=0,sum2=0;
    sum1=p1.t1.hour*3600+p1.t1.min*60+p1.t1.sec;
    sum2=p1.t2.hour*3600+p1.t2.min*60+p1.t2.sec;
    sum=sum2-sum1;
    p1.worktime=sum;
    */
    //p1.t2与p1.t1的差,先做秒的差值,再做分钟的差值,最后做时的差值
    int sum = 0;
    //当下班时间的秒钟比上班时间的秒钟大
    if (p1.t2.sec>p1.t1.sec)
    {
    sum = sum + (p1.t2.sec - p1.t1.sec);
    }
    //当下班时间的秒钟比上班时间的秒钟小,则向下班时间的分钟减去一
    else
    {
    p1.t2.min -= 1;
    sum = sum + (p1.t1.sec - p1.t2.sec);
    }
    //当下班时间的分钟比上班时间的分钟大
    if (p1.t2.min>p1.t1.min)
    {
    sum = sum + 60*(p1.t2.min - p1.t1.min);
    }
    //当下班时间的分钟比上班时间的分钟小,则向下班时间的时钟减去一
    else
    {
    p1.t2.hour -= 1;
    sum = sum + 60 * (p1.t1.min - p1.t2.min);
    }
    //当下班时间的时钟比上班时间的时钟大
    sum = sum + 3600 * (p1.t2.hour - p1.t1.hour);
    return sum;
    }
    //输出工作最久的员工的ID和上班时间,要先算出工作时间
    bool cmp3(Person& p1, Person& p2)
    {
    p1.worktime = cal_work_time(p1);
    p2.worktime = cal_work_time(p2);
    return p1.worktime > p2.worktime;
    }
    using namespace std;
    int main()
    {
    int n;
    int i;
    scanf("%d", &n);
    for (i = 0; i < n; i++)
    {
    scanf("%s%d%d%d%d%d%d%d", p[i].id, &p[i].t1.hour, &p[i].t1.min,&p[i].t1.sec,&p[i].t2.hour,&p[i].t2.min,&p[i].t2.sec,&p[i].worktime);
    //用cmp1,排序后的第一个人是上班时间最早的
    sort(p, p + n, cmp1);
    printf("上班时间最早的员工其ID是:%s;其上班时间为:%d-%d-%d", p[0].id, p[0].t1.hour, p[0].t1.min, p[0].t1.sec);
    //用cmp2,排序后的第一个人是下班时间最晚的
    sort(p, p + n, cmp2);
    printf("下班时间最晚的员工其ID是:%s;其下班时间为:%d-%d-%d", p[0].id, p[0].t2.hour, p[0].t2.min, p[0].t2.sec);
    //用cmp3,排序后
    sort(p, p + n, cmp3);
    printf("工作时间最晚的员工其ID是:%s;其上班时间为:%d-%d-%d", p[0].id, p[0].t1.hour, p[0].t1.min, p[0].t1.sec);
    }
    return 0;
    }

    //N3
    /*有一个M*N的材料和一个s*t的模板,从材料中切除模板,求最大能切出来的模板的数量。
    sample input

    3 4
    a b c d
    c d a b
    a c c d
    2 2
    a b
    c d
    sample out
    2 */
    #include<stdio.h>
    #define MX 100
    #define MY 100
    char map1[MX][MY];//存储大图
    char map2[MX][MY];//存储小图
    int N, M, n, m;
    int ans;
    int max;
    //判断大图里面是否包含小图
    bool judge(char Map[MX][MY], int x, int y)
    {
    for (int i = 0; i < m;i++)
    {
    for (int j = 0; j < n; j++)
    {
    if (Map[x+i][y+j]!=map2[i][j])
    {
    return false;
    }
    }
    }
    return true;
    }
    void dfs(char map[MX][MY],int x,int y,int max)
    {
    if (max>ans)//更新答案
    {
    ans = max;
    }
    if (y>=n)
    {
    return;
    }
    //第一列走完,换第二列
    if (x >= m)
    {
    dfs(map, 0, y + 1, max);
    }
    else
    {
    if (judge(map,x,y))
    {
    char temp[MX][MY] = { 0 };
    for (int i = 0; i < m; i++)
    {
    for (int j = 0; j < n; j++)
    {
    temp[i][j] = map[i][j];
    }
    }
    for (int i = 0; i < m; i++)
    {
    for (int j = 0; j < n; j++)
    {
    temp[x + i][y + j] = '0';
    }
    }
    dfs(temp, x + m, y, max + 1);//确定取这一块儿
    dfs(map, x + 1, y, max);//不取这一块儿,按部就班继续走
    }
    else
    {
    dfs(map, x + 1, y, max);//不匹配则按列走
    }
    }

    }
    int main()
    {
    //int M, N;
    int i, j;
    scanf("%d%d", &M, &N);
    //将大图读入
    for (i = 0; i < M; i++)
    {
    for ( j = 0; j < N; j++)
    {
    scanf("%c%c", &map1[i][j]);
    }
    }
    //将小图读入
    //int m, n;
    scanf("%d%d", &m, &n);
    for ( i = 0; i < m; i++)
    {
    for ( j = 0; j < n; j++)
    {
    scanf("%c%c", &map2[i][j]);
    }
    }
    ans = 0;
    dfs(map1, 0, 0, 0);
    printf("%d ", ans);
    return 0;
    }

    一生有所追!
  • 相关阅读:
    企业组织与经营管理
    VS2008试用版到期解决办法
    [分期付款] 建行安居分期,刚申请过,最高额度居然能申请到100万!汗。。
    [手游新项目历程]-29- windows-PC与 linux虚拟机交互
    诛仙手游培元属性
    [Warning] TIMESTAMP with implicit DEFAULT value
    bzoj3631
    bzoj1257
    bzoj1041
    bzoj1560
  • 原文地址:https://www.cnblogs.com/BlueBlue-Sky/p/8654568.html
Copyright © 2011-2022 走看看