2021-2022-2-第5次单元练习后记

一个简单的说明

主要以记录题目,分享源码为主
顺带记录做题心路历程
太久没有做题了,手生了,难免犯一些低级错误
最后,顺便对我的后续练习起到一个规划的作用

7-1 电子汪 (10 分)

题面

据说汪星人的智商能达到人类 4 岁儿童的水平,更有些聪明汪会做加法计算。比如你在地上放两堆小球,分别有 1 只球和 2 只球,聪明汪就会用“汪!汪!汪!”表示 1 加 2 的结果是 3。

本题要求你为电子宠物汪做一个模拟程序,根据电子眼识别出的两堆小球的个数,计算出和,并且用汪星人的叫声给出答案。

输入格式:

输入在一行中给出两个 [1, 9] 区间内的正整数 A 和 B,用空格分隔。

输出格式:

在一行中输出 A + B 个Wang!。

输入样例:

2 1

输出样例:

Wang!Wang!Wang!

C++源码

#include<cstdio>

inline int read(){
	int f=1,s=0;
	char k=getchar();
	while(k>'9'||k<'0'){if(k=='-')f=-1,k=getchar();}
	while(k>='0'&&k<='9'){s=(s<<3)+(s<<1)+k-'0';k=getchar();}
	return f*s;
}

int a,b;

int main(){
	a=read(),b=read();
	for(int i=1;i<=a+b;++i)printf("Wang!");
	return 0;
}

7-2 大笨钟 (10 分)

题面

微博上有个自称“大笨钟V”的家伙,每天敲钟催促码农们爱惜身体早点睡觉。不过由于笨钟自己作息也不是很规律,所以敲钟并不定时。一般敲钟的点数是根据敲钟时间而定的,如果正好在某个整点敲,那么“当”数就等于那个整点数;如果过了整点,就敲下一个整点数。另外,虽然一天有24小时,钟却是只在后半天敲1~12下。例如在23:00敲钟,就是“当当当当当当当当当当当”,而到了23:01就会是“当当当当当当当当当当当当”。在午夜00:00到中午12:00期间(端点时间包括在内),笨钟是不敲的。

下面就请你写个程序,根据当前时间替大笨钟敲钟。

输入格式:

输入第一行按照hh:mm的格式给出当前时间。其中hh是小时,在00到23之间;mm是分钟,在00到59之间。

输出格式:

根据当前时间替大笨钟敲钟,即在一行中输出相应数量个Dang。如果不是敲钟期,则输出:

Only hh:mm. Too early to Dang.
其中hh:mm是输入的时间。

输入样例1:

19:05

输出样例1:

DangDangDangDangDangDangDangDang

输入样例2:

07:05

输出样例2:

Only 07:05. Too early to Dang.

C++源码

#include<cstdio>

int a,b;

int main(){
	scanf("%d:%d",&a,&b);
	if((a>=0&&a<12)||(a==12&&b==0))printf("Only %02d:%02d.  Too early to Dang.",a,b);
	else 
	{
		if(a>=12)a-=12;
		if(b!=0)++a;
		for(int i=1;i<=a;++i)printf("Dang");	
	}
	return 0;
}
我真傻真的,我光想着秒了这套题,却完全没仔细看题(

7-3 吃鱼还是吃肉 (10 分)

题面

国家给出了 8 岁男宝宝的标准身高为 130 厘米、标准体重为 27 公斤;8 岁女宝宝的标准身高为 129 厘米、标准体重为 25 公斤。

现在你要根据小宝宝的身高体重,给出补充营养的建议。

输入格式:

输入在第一行给出一个不超过 10 的正整数 N,随后 N 行,每行给出一位宝宝的身体数据:

性别 身高 体重
其中性别是 1 表示男生,0 表示女生。身高和体重都是不超过 200 的正整数。

输出格式:

对于每一位宝宝,在一行中给出你的建议:

如果太矮了,输出:duo chi yu!(多吃鱼);
如果太瘦了,输出:duo chi rou!(多吃肉);
如果正标准,输出:wan mei!(完美);
如果太高了,输出:ni li hai!(你厉害);
如果太胖了,输出:shao chi rou!(少吃肉)。
先评价身高,再评价体重。两句话之间要有 1 个空格。

输入样例:

4
0 130 23
1 129 27
1 130 30
0 128 27

输出样例:

ni li hai! duo chi rou!
duo chi yu! wan mei!
wan mei! shao chi rou!
duo chi yu! shao chi rou!

C++源码

#include<cstdio>

inline int read(){
	int f=1,s=0;
	char k=getchar();
	while(k>'9'||k<'0'){if(k=='-')f=-1,k=getchar();}
	while(k>='0'&&k<='9'){s=(s<<3)+(s<<1)+k-'0';k=getchar();}
	return f*s;
}

int a,b,c,n;

int main(){
	n=read();
	while(n){
		a=read(),b=read(),c=read();
		if(a){
			if(b<130)printf("duo chi yu!");
			else if(b==130)printf("wan mei!");
			else if(b>130)printf("ni li hai!");
			putchar(' ');
			if(c<27)printf("duo chi rou!");
			else if(c==27)printf("wan mei!");
			else if(c>27)printf("shao chi rou!");
		}
		else{
			if(b<129)printf("duo chi yu!");
			else if(b==129)printf("wan mei!");
			else if(b>129)printf("ni li hai!");
			putchar(' ');
			if(c<25)printf("duo chi rou!");
			else if(c==25)printf("wan mei!");
			else if(c>25)printf("shao chi rou!");
		}
		n--;
		putchar('\n');
	}
	return 0;
}

7-4 小鲁摘苹果 (10 分)

题面

小鲁家的院子里有一棵苹果树,每到秋天树上就会结出10个苹果。苹果成熟的时候,小鲁就会跑去摘苹果(不如我们去帮他吃掉)。小鲁有个30厘米高的板凳,当他不能直接用手摘到苹果的时候,就会踩到板凳上再试试。 现在已知10个苹果到地面的高度,以及小鲁把手伸直的时候能够达到的最大高度,请帮小鲁算一下他能够摘到的苹果的数目。假设他碰到苹果,苹果就会掉下来。(苹果很配合哦)

输入格式:

输入包括两行数据。 第一行只包括一个100到120之间(包含100和120)的整数(单位:厘米),表示小鲁把手伸直的时候能够达到的最大高度。

第二行包含10个100到200之间(包括100和200)的整数(以厘米为单位)分别表示10个苹果到地面的高度,两个相邻的整数之间用一个空格隔开。

输出格式:

输出包括一行,这一行只包含一个整数,表示小鲁能够摘到的苹果的数目。

输入样例:

110
100 200 150 140 129 134 167 198 200 111

输出样例:

5

C++源码

#include<cstdio>

inline int read(){
	int f=1,s=0;
	char k=getchar();
	while(k>'9'||k<'0'){if(k=='-')f=-1,k=getchar();}
	while(k>='0'&&k<='9'){s=(s<<3)+(s<<1)+k-'0';k=getchar();}
	return f*s;
}

int n,a,b;

int main(){
	b=0;
	n=read();
	for(int i=1;i<=10;++i){
		a=read();
		if(a<=n+30)b++;
	}
	printf("%d",b);
	return 0;
}

7-5 关羽 (10 分)

题面

关羽千里走单骑去寻找兄长,需要连过10关。先输入关羽的武力,再输入10关守将的武力。如果关羽武力强于守将武力,则能够通过该关;如果守将武力强于或等于关羽,则无法通过该关;请问关羽能否找到兄长?

输入格式:

第一行1个实数,表示关羽的武力。 接下来10行,每行一个实数,分别表示10关守将的武力。

输出格式:

如果关羽成功过10关,则输出"GOOD";否则输出一个整数,表示关羽在哪一关失败。

输入样例:

14.5
11.9
6.0
12.4
10.6
7.0
11.4
13.0
10.5
12.8
11.0

输出样例:

GOOD

C++源码

#include<cstdio>
#include<cmath>

double n,a,b;

int main(){
	scanf("%lf",&n);
	for(int i=1;i<=10;++i){
		scanf("%lf",&a);
		if(abs(a*1000000)>abs(n*1000000)){
			printf("%d",i);
			return 0;
		}
	}
	printf("GOOD");
	return 0;
}
因为double有六位小数,所以我干脆右移小数点六位(

7-6 水仙花数 (10 分)

题面

请判断一个数是不是水仙花数。水仙花数是指各个数字立方和等于它本身的三位数。

输入格式:

有多组测试数据,每组测试数据以包含一个整数n(100<=n<1000)
输入0表示程序输入结束。

输出格式:

如果n是水仙花数就输出Yes
否则输出No

输入样例:

153
154
370
0

输出样例:

Yes
No
Yes

C++源码

#include<cstdio>
#include<cmath>

inline int read(){
	int f=1,s=0;
	char k=getchar();
	while(k>'9'||k<'0'){if(k=='-')f=-1,k=getchar();}
	while(k>='0'&&k<='9'){s=(s<<3)+(s<<1)+k-'0';k=getchar();}
	return f*s;
}


int n,a,b,n1,c;

int main(){
	n=read();
	while(n!=0)
	{
		n1=n;
		b=0;
		while(n>10){
			a=n%10;
			b+=a*a*a;
			n/=10;
		}
		b+=n*n*n;
		if(b==n1)printf("Yes\n");
		else printf("No\n");
		n=read();
	}
	return 0;
}
梦回初中,没想到第二次写到这道题是六年后,感慨

7-7 海选高大中锋 (10 分)

题面

HDU篮球队需要一个高大中锋,只要个子高,不会打球没关系。
请你从n个候选人找出个子最高的。

输入格式:

第1行包含一个整数n,表示人数。
第2行包含n个实数,表示n个人的身高。

输出格式:

包含一个实数,表示最高的人的身高,小数点保留2位。

输入样例:

在这里给出一组输入。例如:

10
161.01 226 180.76 175 177 165 158 150 170 171

输出样例:

226.00

C++源码

#include<cstdio>
#include<cmath>

int n;
double maxs,in;

int main(){
	scanf("%d",&n);
	maxs=0;
	for(int i=1;i<=n;++i){
		scanf("%lf",&in);
		if(abs(maxs*100)<abs(in*100))maxs=in;
	}
	printf("%.2lf",maxs);
	return 0;
}

7-8 谁先倒 (10 分)

题面

划拳是古老中国酒文化的一个有趣的组成部分。酒桌上两人划拳的方法为:每人口中喊出一个数字,同时用手比划出一个数字。如果谁比划出的数字正好等于两人喊出的数字之和,谁就输了,输家罚一杯酒。两人同赢或两人同输则继续下一轮,直到唯一的赢家出现。

下面给出甲、乙两人的酒量(最多能喝多少杯不倒)和划拳记录,请你判断两个人谁先倒。

输入格式:

输入第一行先后给出甲、乙两人的酒量(不超过100的非负整数),以空格分隔。下一行给出一个正整数N(≤100),随后N行,每行给出一轮划拳的记录,格式为:

甲喊 甲划 乙喊 乙划
其中喊是喊出的数字,划是划出的数字,均为不超过100的正整数(两只手一起划)。

输出格式:

在第一行中输出先倒下的那个人:A代表甲,B代表乙。第二行中输出没倒的那个人喝了多少杯。题目保证有一个人倒下。注意程序处理到有人倒下就终止,后面的数据不必处理。

输入样例:

1 1
6
8 10 9 12
5 10 5 10
3 8 5 12
12 18 1 13
4 16 12 15
15 1 1 16

输出样例:

A
1

C++源码

#include<cstdio>
#include<cmath>

inline int read(){
	int f=1,s=0;
	char k=getchar();
	while(k>'9'||k<'0'){if(k=='-')f=-1,k=getchar();}
	while(k>='0'&&k<='9'){s=(s<<3)+(s<<1)+k-'0';k=getchar();}
	return f*s;
}

int a,b,n,a1,b1,c1,d1,a2,b2;

int main(){
	a=read(),b=read(),n=read();
	for(int i=1;i<=n;++i){
		a1=read(),b1=read(),c1=read(),d1=read();
		if(((a1+c1)==b1)&&((a1+c1)==d1))continue;
		if(((a1+c1)==b1)&&((a1+c1)!=d1))a2++;
		if(((a1+c1)==d1)&&((a1+c1)!=b1))b2++;
		if(a2==a+1||b2==b+1)break;
	}
	if(a2==a+1)printf("A\n%d",b2);
	else if(b2==b+1)printf("B\n%d",a2);
	return 0;
}

7-9 作品评分 (10 分)

题面

全国中小学生Scratch作品大赛拉开了序幕。每个参赛选手可以通过网络直接上传作品。本次比赛人人可做评委。每个网络评委可以通过网络对每一件作品进行打分。评分系统也是请程序高手设计的,能自动去掉一个最高分和一个最低分,求出平均分。

输入格式:

输入数据包括两行: 第一行为n,表示n个评委,n>2。
第二行是n个评委的打分,分数之间有一个空格。打分是可以带有小数部分的。

输出格式:

输出平均分,结果保留两位小数。

输入样例:

6
10 9 8 7.9 9 9.5

输出样例:

8.88

C++源码

#include<cstdio>
#include<cmath>
#define max(a,b) (a)>(b)?(a):(b)
#define min(a,b) (a)<(b)?(a):(b)

inline int read(){
	int f=1,s=0;
	char k=getchar();
	while(k>'9'||k<'0'){if(k=='-')f=-1,k=getchar();}
	while(k>='0'&&k<='9'){s=(s<<3)+(s<<1)+k-'0';k=getchar();}
	return f*s;
}

int n,ans,n1;
double sum,ins,maxx,minx,ns;

int main(){
	sum=0,maxx=0,minx=10.0;
	scanf("%d",&n);
	n1=n;
	while(n){
		scanf("%lf",&ins);
		maxx=max(maxx,ins);
		minx=min(minx,ins);
		sum+=ins;
		n--;
	}
	sum-=maxx,sum-=minx;
	sum=sum/(n1-2);
	printf("%.2lf",sum);
	return 0;
}
本题一开始还想抖机灵,直接粗暴取前2位小数即可,结果调了半天发现除法不是inf就是nan的原因竟然是,我的n是0(麻了

本次练习的反思

我觉得最大的原因还是,我昨天晚上打狒狒14打到四点钟
早上也确实急功近利了,只能说金典老问题了

关于源码中read()函数的说明

read()函数为自行定义的一个快速读入整数的函数,不熟悉快读的朋友可以自行改为scanf()语句。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值
>