HZNU2016年秋季学期程序设计基础第一次考试题解

版权声明:本文为博主原创文章,转载请务必注明出处。 https://blog.csdn.net/wlx65003/article/details/53133896

A.CCJ的一见如旧

给2取余的结果除了1和0还有可能是其他?
直接输出hello world即可

#include<stdio.h>
int main(void)
{
    printf("hello world\n");
    return 0;
}

B.CCJ的异想天开

题目描述有点拗口,就是跟着题目意思写一遍你会发现最后输出的就是a+b。

#include<stdio.h>
void main()
{
    int a,b;
    scanf("%d%d",&a,&b);
    printf("%d",a+b);
}

C.CCJ的叫醒闹钟

除除余余就好了

#include<stdio.h>
int main() 
{
    int T,n,m;
    scanf("%d",&T);
    while(T--)
    {
        scanf("%d%d",&n,&m);    
        if(m/10000>=n/10000)
            printf("%d\n",(m/10000-n/10000)*3600+(m/100%100-n/100%100)*60+(m%100-n%100));
        else
            printf("%d\n",(24+m/10000-n/10000)*3600+(m/100%100-n/100%100)*60+(m%100-n%100));
    }
}

D. CCJ的类型转换

也是挺简单的一道基础语法题,不知道为什么有的同学错这么多次。
四舍五入:floor(x+0.5)

#include <stdio.h>
#include <math.h>
int main()
{
    int T;
    scanf("%d",&T);
    while(T--)
    {
        int a,b;
        double c;
        char d;
        scanf("%d %d %lf %c",&a,&b,&c,&d);
        printf("%.2f %d %d %d %d\n",1.*a/b,(int)floor(1.*a/b+0.5),a/b,(int)ceil(a*b*c),(int)d); 
    }
    return 0;
}

E. CCJ的姐姐情缘

考查循环

#include<stdio.h>
int main() 
{
    int T,n,m;
    scanf("%d",&T);
    while(T--)
    {
        scanf("%d",&n);
        m = (1+n)%2;
        printf("I hate");
        while(--n)
        {
            (n%2==m)?printf(" that I love"):printf(" that I hate");
        }
        printf(" you\n");
    }
}

F. CCJ的坦克碾压

也是考查循环,稍微复杂点

#include<stdio.h>
int main() 
{
    int T,i,j,n;
    scanf("%d",&T);
    while(T--)
    {
        scanf("%d",&n);
        for(i=0;i<n;i++)
        {
            for(j=0;j<n;j++)
                printf(" ");
            for(j=0;j<n;j++)
                printf("*");
            printf("\n");
        }

        for(i=0;i<n;i++)
        {
            for(j=0;j<n*3;j++)
                printf("*");
            printf("\n");
        }

        for(i=0;i<n;i++)
        {
            for(j=0;j<n;j++)
                printf("*");
            for(j=0;j<n;j++)
                printf(" ");
            for(j=0;j<n;j++)
                printf("*");
            printf("\n");
        }
        printf("\n");
    }
}

这题竟然有人打表打出来了,佩服他的毅力。
这里写图片描述

G.CCJ的直线化简

说是最后一题,其实这题挺简单的(想出难点单总不让QAQ)
注意下化到最简即可

#include<stdio.h>
int gcd(int a, int b)
{
    return b == 0 ? a : gcd(b, a%b);
}

int main()
{
    int t, a, b, c, m;
    scanf("%d", &t);
    getchar();
    while (t--)
    {
        scanf("y=%d/%dx+%d\n", &a, &b, &c);
        m = gcd(a, b);
        m = gcd(m, c*b);
        if (a / m == 1 && b / m == 1)
            printf("x-y+%d=0\n", c*b / m);
        else if (a / m == 1)
            printf("x-%dy+%d=0\n", b / m, c*b / m);
        else if (b / m == 1)
            printf("%dx-y+%d=0\n", a / m, c*b / m);
        else
            printf("%dx-%dy+%d=0\n", a / m, b / m, c*b / m);
    }
}

H. 附加题 滑雪

这题主要是记忆化搜索,有点超纲,有兴趣的同学可以研究下。

#include <iostream>
#include <cstring>
#include <iomanip>
#include <cstdio>
using namespace std;

int a[200][200]={0};
int d[200][200]={0};
int di[]={-1,1,0,0},dj[]={0,0,-1,1};
int r,c;
bool vis[200][200]={0};
int dp(int i,int j)
{
    if(d[i][j]!=-1)return d[i][j];
    int m=0;
    for(int k=0 ; k<4 ; ++k)
    {
        int ni=i+di[k],nj=j+dj[k];
        if(a[ni][nj]<a[i][j] && ni>=0 && nj>=0 && ni<r && nj<c)
        {
            if(!vis[ni][nj])
            {
                vis[ni][nj]=1;
                m=max(m,dp(ni,nj)+1);
                vis[ni][nj]=0;
            }
        }
    }
    d[i][j]=m;
    return m;
}
int main(void)
{
    scanf("%d%d",&r,&c);
    for(int i=0 ; i<r ; ++i)
    for(int j=0 ; j<c ; ++j)
        scanf("%d",&a[i][j]);
    memset(d,-1,sizeof d);
    int ans=0;
    for(int i=0 ; i<r ; ++i)
    for(int j=0 ; j<c ; ++j)
    {
        memset(vis,0,sizeof vis);
        ans=max(ans,dp(i,j));
    }
    printf("%d\n",ans+1);
    return 0;
}

猜你喜欢

转载自blog.csdn.net/wlx65003/article/details/53133896