HZNU2016年秋季學期程式設計基礎第一次考試題解
阿新 • • 發佈:2018-12-30
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;
}