2021级C++上机考(上)

*上一般都是水题,看看就好

一、立方值

描述

输出从1到m各个数的立方值。注意看样例的输出格式。

输入

只有一组案例。

一个正整数m。(m<=20)

输出

一共有m行,每行输出一个表达式,例如第1行输出1*1*1=1,第2行输出2*2*2=8,以此类推。

最后一行输出后也要换行。

样例输入

3
 

样例输出

1*1*1=1

2*2*2=8

3*3*3=27

关键代码

*****
for (int i = 1; i <= m; i++)
{
	int ans = i * i * i;//或者pow(i,3);
	printf("%d*%d*%d=%d\n", i, i, i, ans);//cout << i << '*' << i << '*' << i << '=' << ans << endl;
}
*****

解释

m<20并且只算三次方,不会有超时的现象,用pow或者直接乘就好,没有必要用到快速幂。从这道题可以看出printf进行格式输出真的很香,用cout就是长长的一大串。

二、星号阵列-19

描述

根据行数和列数,输出星号阵列。要求在列阵的左边输出行编号,阵列的上方输出列编号。

输入

多组案例。一个正整数n,表示案例的数量。(n<=30)

每组案例由两个正整数a和b组成,表示星号阵列的行数和列数。(a<=9, b<=9)

输出

针对每组案例,输出一个星号阵列。要求在列阵的左边输出行编号,阵列的上方输出列编号。注意每个阵列的左上角有个空格,这样列号才能对齐。

每组案例的最后一行需要照常换行。

样例输入

2
2 3
5 4
 

样例输出

 123

1***

2***

 1234

1****

2****

3****

4****

5****

关键代码

*****
for (int i = 0; i <= a; i++)
{
	for (int j = 0; j <= b; j++)
	{
		if (i == 0 && j == 0)
		{
			cout << " ";
		}
		else if (i == 0)
		{
			cout << j;
		}
		else if (j == 0)
		{
			cout << i;
		}
		else
		{
			cout << "*";
		}
	}
	cout << endl;
}
*****

解释

又是我最爱的星号阵列,这题就是在原来输出实心矩形的外层输出行数和列数,所以行列都从0开始,先输出一个空格,然后再第0行输出列的标号,在第0列输出行的标号。

三、休养生息

描述

汉朝初期国家采用修养生息政策,税收税率采用“三十税一”,即按家庭收入的三十分之一缴纳税费。具体实施过程中,如果遇到无法除尽的情况,那么按家庭收入的三十分之一的整数部分作为该户家庭应缴纳的税费。

已知汉朝统治下所有m户家庭各自的输入,问国家总共可以收到多少税费。

输入

多组案例。一个正整数n,表示案例的数量。(n<=20)

每组案例先是一个正整数m,表示家庭的数量,(m<=100000)

然后是m个正整数,表示各户家庭的收入。(均不大于10000)

输出

针对每组案例,输出一个整数,表示国家总共收到的税费。

每组案例输出完要换行。

样例输入

2
2
100 40
3
30 60 90
 

样例输出

4

6

关键代码

*****
int sum = 0;
for (int i = 1; i <= m; i++)
{
	int income;
	cin >> income;
	sum = sum + income / 30;
}
*****

解释

根据题意,因为只取收入三十分之一的整数部分,所以sum定义成int类型就行了,然后输入每个家庭的收入,加起来就行了。

四、饥饿的山岭巨人

描述

一个饥饿的山岭巨人Fan,每日三餐都需要进食很多食物才不会感到饥饿。

Fan早餐必须至少进食a吨食物,截止到午餐(早餐+午餐)必须至少进食b吨食物,截止到晚餐(早、中、晚之和)必须至少进食c吨食物,任何一次不满足条件则会导致Fan饥饿。(“至少”表示大于等于)

但是Fan如果单次(早餐或者中餐或者晚餐)进食量超过d吨则会撑死。(“超过”表示大于)

其它情况下,进食量很合适,Fan会很开心。

输入

多组案例。一个正整数n,表示案例的数量。(n<=1000)

每组案例先是四个正整数a、b、c、d,含义见【问题描述】,(均不大于10000)

然后是三个正整数x、y、z,表示早餐、午餐、晚餐进食食物的吨数。(均不大于10000)

输出

针对每组案例,如果会导致撑死,则输出Fan is dead.

否则如果会导致饥饿,则输出Fan is hungry.

其它情况下,输出Fan is happy.

每组案例输出完都要换行。

样例输入

3
10 20 30 15 10 12 15
10 20 30 14 10 12 15
10 20 30 14 10 12 7
 

样例输出

Fan is happy.

Fan is dead.

Fan is hungry.

关键代码

*****
if (x > d || y > d || z > d)
{
	cout << "Fan is dead.\n";
}
else if (x < a || x + y < b || x + y + z < c)
{
	cout << "Fan is hungry.\n";
}
else
{
	cout << "Fan is happy.\n";
}
*****

解释

这题虽然题目看起来很简单,但是有两个坑:1、输出的是一句完整的话,后面有句号;2、撑死就不会饿,死了和饿了不会同时存在。所以先判断是不是撑死的,在判断饿不饿,最后剩下的就是开心的。

五、愚人码头

描述

一只船在静水中航行速度一定,设为v1。一条河流的上下游有两个相距为s的码头,该船航行于此两码头之间,往返一次需要时间为t1,水流速度一定,设为v2。若该船在静水中往返同样的距离,需要的时间为t2。求t1-t2。答案精确到小数点后2位。

输入

多组案例。一个正整数n,表示案例的数量。(n<=100)

每组案例中,有三个正浮点数s、v1、v2,分别表示码头间的距离、船速、水流速度。(均不大于10000,且保证v1>v2)

输出

针对每组案例,输出一个浮点数,表示t1-t2的结果。四舍五入到小数点后两位。

每组案例输出完要换行。

样例输入

2
7.5 1.5 1
8 4 1
 

样例输出

8

0.27

关键代码

*****
double t1 = s / (v1 + v2) + s / (v1 - v2);
double t2 = 2 * s / v1;
printf("%.2lf\n", t1 - t2);
*****

解释

这是一个典型的渡河问题,在有水速时,顺水是要加水的速度,逆水是要减去水的速度,没有水速时上游往下游与下游往上游是一样的,最后用printf进行格式输出。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值