语法基础课——第一讲 习题

语法基础课——第一讲 习题,第1张

语法基础课——第一讲 习题


第一讲 习题
例题
AcWing 608. 差

原题链接

读取四个整数 A , B , C , D A,B,C,D A,B,C,D,并计算 ( A × B − C × D ) (A×B−C×D) (A×B−C×D) 的值。

输入格式

输入共四行,第一行包含整数 A A A,第二行包含整数 B B B,第三行包含整数 C C C,第四行包含整数 D D D。

输出格式

输出格式为 DIFERENCA = X,其中 X 为 ( A × B − C × D ) (A×B−C×D) (A×B−C×D) 的结果。

数据范围

− 10000 ≤ A , B , C , D ≤ 10000 −10000≤A,B,C,D≤10000 −10000≤A,B,C,D≤10000

输入样例:

5
6
7
8

输出样例:

DIFERENCA = -26

时/空限制:1s / 64MB
来源:语法题
算法标签:顺序结构

yxc’s Solution

如果只是用scanf函数和printf函数,可以不用加using namespace std;这一语句.

不管是空格隔开的整数,还是每行一个整数,在用scanf函数读入时,是无所谓的;也就是说,只要整数是隔开的,它就可以被读进来,无论中间隔了多少个空格还是回车.

在printf函数中,输出在最后加不加回车('n')是不影响正确性的(除非题目另有明确要求).

很多算法题目的网站的题目,在检查输出结果是否正确时,会自动忽略最后的回车,和每行后面的空格.

但是如果在输出结果中间加入多余的空格,会造成 P E PE PE(格式错误),例如正确答案为:

3 4 5

而输出结果为:

3  4 5

则会造成 P E PE PE.

引用的头文件越多,编译时间就会越长.

但是在算法竞赛中,程序的运行时间是不算编译时间的.

在算法竞赛中,有一种万能头文件,为:

#include 

它几乎囊括了所有在算法竞赛中需要用到的头文件,但正因如此,其编译时间是要远远长于其他的头文件的.

#include 

int main() {
	int a, b, c, d;
	scanf("%d%d%d%d", &a, &b, &c, &d);
	printf("DIFERENCA = %d", a * b - c * d);
	
	return 0;
}
// 运行时间: 10 ms
// 运行空间: 216 KB
AcWing 604. 圆的面积

原题链接

计算圆的面积的公式定义为 A = π R 2 A=πR^2 A=πR2。

请利用这个公式计算所给圆的面积。

π π π 的取值为 3.14159 3.14159 3.14159。

输入格式

输入包含一个浮点数,为圆的半径 R R R。

输出格式

输出格式为 A=X,其中 X 为圆的面积,用浮点数表示,保留四位小数。

数据范围

0 < R < 10000.00 0

输入样例:

2.00

输出样例:

A=12.5664

时/空限制:1s / 64MB
来源:语法题
算法标签:顺序结构

yxc’s Solution

大家都只要,英语的语法比较琐碎;学C++语言的语法也差不多,虽然C++语言的语法比英语少很多,但也是有很多特别细节的东西.

英语的语法是一种记忆性记忆,学了两天不看就忘了;但是编程的语法是一种动作性记忆,有点类似于自行车,会骑自行车以后,就算长时间不骑,需要骑的时候还是会骑.

因为这道题要求保留 4 4 4 位小数,所以使用printf函数输出,会轻松很多.

浮点数类型有两种(float和double),那么什么时候用float,什么时候用double呢?

可以这么说,在 99 % 99% 99% 的情况下,==在算法题中,尽可能使用double==而不是float.

因为float的精度较低(保留 6 ∼ 7 6sim 7 6∼7 位有效数字),而double的精度更高(保留 15 ∼ 16 15 sim 16 15∼16 位有效数字).

而且就本题而言, π R 2 pi R^2 πR2 的有效数字位数最坏为 6 + 2 × 6 = 18 6+2times 6=18 6+2×6=18 位,但是只需要保留小数点后 4 4 4 位,即只需要保留 2 × 4 + 1 + 5 = 14 2times 4 + 1+5=14 2×4+1+5=14 位有效数字即可,故这里使用的浮点数类型是double.

所有C语言的代码都可以在支持C++语言的编译器中编译,所以C语言中的所有头文件都是可以在C++语言中使用的,例如:

#include 

在C++语言中,即可以使用上述的头文件,也可以使用C++语言中自己作为代替的作用完全相同的头文件,如上例子对应的C++语言自带的头文件为:

#include 

它们都可以被编译通过,并且都有scanf函数和printf函数,且用法完全相同.

但是,更推荐使用C++语言自带的头文件,而不再使用C语言中的头文件;因为C++语言自带的头文件可能会更适合C++语言的语法,会作出稍许改动.

编译器与编译:C++语言是高级计算机语言,但是计算机本身是读不懂C++语言的,编译器是将我们写出的C++语言的代码,翻译成计算机能够理解的形式的工具;翻译的过程即为编译.

#include 

int main() {
	double pi = 3.14159, r;
	scanf("%lf", &r);
	printf("A=%.4lfn", pi * r * r);

	return 0;
}
// 运行时间: 10 ms
// 运行空间: 216 KB 

Q:算术运算符(+-*/)与数字、变量之间为什么要加空格呢?

A:这完全取决于个人习惯,加不加空格都可以,但推荐加空格,可以让代码更漂亮,更易查找错误与修改.

例如上代码的第 7 7 7 行可以写成:

printf("A=%.4lfn",pi*r*r);
AcWing 606. 平均数1

原题链接

读取两个浮点数 A A A 和 B B B 的值,对应于两个学生的成绩。

请你计算学生的平均分,其中 A A A 的成绩的权重为 3.5 3.5 3.5, B B B 的成绩的权重为 7.5 7.5 7.5。

成绩的取值范围在 0 0 0 到 10 10 10 之间,且均保留一位小数。

输入格式

输入占两行,每行包含一个浮点数,第一行表示 A A A,第二行表示 B B B。

输出格式

输出格式为 MEDIA = X,其中 X 为平均分,结果保留五位小数。

数据范围

0 ≤ A , B ≤ 10.0 0≤A,B≤10.0 0≤A,B≤10.0

输入样例:

5.0
7.1

输出样例:

MEDIA = 6.43182

时/空限制:1s / 64MB
来源:语法题
算法标签:顺序结构

yxc’s Solution

这里的浮点数就是小数的意思.加权平均数为 A × 3.5 + B × 7.5 3.5 + 7.5 frac{Atimes 3.5+B times 7.5}{3.5+7.5} 3.5+7.5A×3.5+B×7.5​.

#include 

int main() {	
    double a, b;
	scanf("%lf%lf", &a, &b);
	printf("MEDIA = %.5lfn", (a * 3.5 + b * 7.5) / 11);

	return 0;
}
// 运行时间: 10 ms
// 运行空间: 216 KB 
AcWing 609. 工资

原题链接

请编写一个程序,可以读取一名员工的员工编号,本月工作总时长(小时)以及时薪,并输出他的工资条,工资条中包括员工编号和员工月收入。

输入格式

输入包含两个整数和一个浮点数,分别代表员工编号,工作时长以及时薪。

每个数占一行。

输出格式

输出共两行,第一行格式为 NUMBER = X,其中 X 为员工编号。

第二行格式为 SALARY = U$ Y,其中 Y 为该员工月收入,保留两位小数。

数据范围

1 ≤ 员 工 编 号 ≤ 100 , 1≤员工编号≤100, 1≤员工编号≤100,
1 ≤ 总 工 作 时 长 ≤ 200 , 1≤总工作时长≤200, 1≤总工作时长≤200,
1 ≤ 时 薪 ≤ 50 1≤时薪≤50 1≤时薪≤50

输入样例:

25
100
5.50

输出样例:

NUMBER = 25
SALARY = U$ 550.00

时/空限制:1s / 64MB
来源:语法题
算法标签:顺序结构

yxc’s Solution

该 员 工 月 收 入 = 总 工 作 时 长 × 时 薪 . 该员工月收入=总工作时长 times 时薪. 该员工月收入=总工作时长×时薪.

精度低的数据类型和精度高的数据类型之间,进行计算时,会将精度低的转化为精度高,再参与运算.

在学习过程,对于某些语法可能会忘记或者混淆,这种时候可以打开自己的IDE或者编辑器,写一写代码运行调试一些自己可能疑惑的地方;因为编译器是不会骗人的,它们总会给你,你写的代码的语法的正确与否.

这样经过长时间的练习与调试,语法就可以掌握地十分熟练了.

IDE和编辑器:IDE指的是集成开发环境,可以编写代码,并且开发某些大型项目;编辑器不是编译器,一般只是编写代码的工具.

#include 

int main() {
	int number, hour;
	double money;
	scanf("%d%d%lf", &number, &hour, &money);
	printf("NUMBER = %dn", number);
	printf("SALARY = U$ %.2lfn", hour * money);
	
	return 0;
}
// 运行时间: 10 ms
// 运行空间: 220 KB 
AcWing 615. 油耗

原题链接

给定一个汽车行驶的总路程( k m km km)和消耗的油量( l l l),请你求出汽车每消耗 1 1 1 升汽油可行驶多少公里路程。

输入格式

输入共两行,第一行包含整数 X X X,表示行驶总路程。

第二行包含保留一位小数的浮点数 Y Y Y,表示消耗的油量。

输出格式

输出格式为 M km/l,其中 M 为计算结果,保留三位小数。

数据范围

1 ≤ X , Y ≤ 1 0 9 1≤X,Y≤10^9 1≤X,Y≤109

输入样例:

500
35.0

输出样例:

14.286 km/l

时/空限制:1s / 64MB
来源:语法题
算法标签:顺序结构

yxc’s Solution

每 升 其 由 可 行 驶 的 公 里 数 = 行 驶 总 路 程 消 耗 的 油 量 每升其由可行驶的公里数=frac{行驶总路程}{消耗的油量} 每升其由可行驶的公里数=消耗的油量行驶总路程​

虽然 X X X 输入的是整数,但是整数也是特殊的浮点数,所以可以直接用浮点数读入 X X X.

但是,反过来就不行,不能将浮点数读入到整数变量当中,因为可能会出现一些精度问题.

#include 

int main() {
	double x, y;
	scanf("%lf%lf", &x, &y);
	printf("%.3lf km/l", x / y);
	return 0;
}
// 运行时间: 10 ms
// 运行空间: 216 KB 
AcWing 616. 两点间的距离

原题链接

给定两个点 P 1 P_1 P1​ 和 P 2 P_2 P2​,其中 P 1 P_1 P1​ 的坐标为 ( x 1 , y 1 ) (x_1,y_1) (x1​,y1​), P 2 P_2 P2​ 的坐标为 ( x 2 , y 2 ) (x_2,y_2) (x2​,y2​),请你计算两点间的距离是多少。

d i s t a n c e = ( x 2 − x 1 ) 2 + ( y 2 − y 1 ) 2 distance=sqrt{(x_2-x_1)^2+(y_2-y_1)^2} distance=(x2​−x1​)2+(y2​−y1​)2 ​

输入格式

输入共两行,每行包含两个双精度浮点数 x i , y i x_i,y_i xi​,yi​,表示其中一个点的坐标。

输入数值均保留一位小数。

输出格式

输出你的结果,保留四位小数。

数据范围

− 1 0 9 ≤ x i , y i ≤ 1 0 9 −10^9≤x_i,y_i≤10^9 −109≤xi​,yi​≤109

输入样例:

1.0 7.0
5.0 9.0

输出样例:

4.4721

时/空限制:1s / 64MB
来源:语法题
算法标签:顺序结构

yxc’s Solution

如何开根号?

首先,平方是很好求的, ( x 2 − x 1 ) 2 = ( x 2 − x 1 ) × ( x 2 − x 1 ) (x_2-x_1)^2=(x_2-x_1)times(x_2-x_1) (x2​−x1​)2=(x2​−x1​)×(x2​−x1​);

注意, ( x 2 − x 1 ) 2 (x_2-x_1)^2 (x2​−x1​)2 在实际代码中不能写成(x2 - x1) ^ 2,因为尖括号(^)在C++语言中不表示乘方的意思,它有自己额外的含义.

开根号有一个函数,即sqrt函数,用法为sqrt(x),其中x为要开方的数,这个函数在cmath头文件中.

#include 
#include  // 因为要用到 sqrt 函数,所以在开始写上 cmath 这一头文件

int main() {
	double x1, y1, x2, y2;
	scanf("%lf%lf", &x1, &y1);
	scanf("%lf%lf", &x2, &y2);
	printf("%.4lf", sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1)));
	
    return 0;
}
// 运行时间: 10 ms
// 运行空间: 216 KB 
AcWing 653. 钞票

原题链接

在这个问题中,你需要读取一个整数值并将其分解为多张钞票的和,每种面值的钞票可以使用多张,并要求所用的钞票数量尽可能少。

请你输出读取值和钞票清单。

钞票的可能面值有 100 , 50 , 20 , 10 , 5 , 2 , 1 100,50,20,10,5,2,1 100,50,20,10,5,2,1。

输入格式

输入一个整数 N N N。

输出格式

参照输出样例,输出读取数值以及每种面值的钞票的需求数量。

数据范围

0 < N < 1000000 0

输入样例:

576

输出样例:

576
5 nota(s) de R$ 100,00
1 nota(s) de R$ 50,00
1 nota(s) de R$ 20,00
0 nota(s) de R$ 10,00
1 nota(s) de R$ 5,00
0 nota(s) de R$ 2,00
1 nota(s) de R$ 1,00

时/空限制:1s / 64MB
来源:语法题
算法标签:顺序结构

yxc’s Solution

任何一个面值,都一定能用这些钞票凑出来;如果想让钞票的数量最少,应该先尽可能地用面值为 100 100 100 的,再尽可能用面值为 50 50 50 的……以此类推;

#include 

int main() {
	int n;
	scanf("%d", &n);
	printf("%dn", n);

	printf("%d nota(s) de R$ 100,00n", n / 100);
	n %= 100;
	printf("%d nota(s) de R$ 50,00n", n / 50);
	n %= 50;
	printf("%d nota(s) de R$ 20,00n", n / 20);
	n %= 20;
	printf("%d nota(s) de R$ 10,00n", n / 10);
	n %= 10;
	printf("%d nota(s) de R$ 5,00n", n / 5);
	n %= 5;
	printf("%d nota(s) de R$ 2,00n", n / 2);
	n %= 2;
	printf("%d nota(s) de R$ 1,00n", n); // 面值为 1 时,就可以不用除以 1 了
	
    return 0;
}
// 运行时间: 10 ms
// 运行空间: 220 KB 
AcWing 654. 时间转换

原题链接

读取一个整数值,它是工厂中某个事件的持续时间(以秒为单位),请你将其转换为小时:分钟:秒来表示。

输入格式

输入一个整数 N N N。

输出格式

输出转换后的时间表示,格式为 hours:minutes:seconds。

数据范围

1 ≤ N ≤ 1000000 1≤N≤1000000 1≤N≤1000000

输入样例:

556

输出样例:

0:9:16

时/空限制:1s / 64MB
来源:语法题
算法标签:顺序结构

yxc’s Solution

和653. 钞票类似,先看是多少小时,即 h o u r s = ⌊ n 3600 ⌋ hours=lfloorfrac{n}{3600}rfloor hours=⌊3600n​⌋( 3600 3600 3600 秒为 1 1 1 小时);随后算一下,除去小时之后,余下的秒数为 n % 3600 n%3600 n%3600,有 m i n u t e s = ⌊ n % 3600 60 ⌋ minutes=lfloorfrac{n % 3600}{60}rfloor minutes=⌊60n%3600​⌋;最后,显然有秒数为 s e c o n d s = n % 60 seconds=n% 60 seconds=n%60.

#include 

int main() {
	int n;
	scanf("%d", &n);
	printf("%d:%d:%d", n / 3600, n % 3600 / 60, n % 60);
	
	return 0;
}
// 运行时间: 10 ms
// 运行空间: 216 KB 

习题
AcWing 605. 简单乘积

原题链接

读取两个整数值。

在此之后,计算它们的乘积并将结果存储在名为 PROD 的变量中。

输出结果如下例所示。

输入格式

共两行,每行包含一个整数。

输出格式

输出格式为 PROD = X,其中 X 为乘积结果。

数据范围

输入的两个整数的绝对值均不超过 10000 10000 10000。

输入样例:

3
9

输出样例:

PROD = 27

时/空限制:1s / 64MB
来源:语法题
算法标签:顺序结构

yxc’s Solution
#include 

using namespace std;

int main() {
	int a, b;
	cin >> a >> b;
	cout << "PROD = " << a * b << endl;

	return 0;
}
// 运行时间: 20 ms
// 运行空间: 224 KB 
AcWing 611. 简单计算

原题链接

给定你两个产品的产品编号,产品数量以及产品单价。

请你计算买下两种产品一共需要花费多少钱。

输入格式

输入共两行。

每行包含两个整数以及一个浮点数,表示其中一件产品的产品编号,产品数量以及产品单价。

输出格式

输出格式为 VALOR A PAGAR: R$ X,其中 X 为产品总价值,保留两位小数。

数据范围

1 ≤ 产 品 编 号 , 产 品 数 量 ≤ 10000 , 1≤产品编号,产品数量≤10000, 1≤产品编号,产品数量≤10000,
1.00 ≤ 产 品 单 价 ≤ 10000.00 1.00≤产品单价≤10000.00 1.00≤产品单价≤10000.00

输入样例:

12 1 5.30
16 2 5.10

输出样例:

VALOR A PAGAR: R$ 15.50

时/空限制:1s / 64MB
来源:语法题
算法标签:顺序结构

yxc’s Solution

产 品 总 价 值 = 产 品 1 数 量 × 产 品 1 单 价 + 产 品 2 数 量 × 产 品 2 单 价 产品总价值=产品_1数量 times 产品_1单价+产品_2数量 times 产品_2单价 产品总价值=产品1​数量×产品1​单价+产品2​数量×产品2​单价.

cin,cout和scanf,printf是可以混用的,前提是不加一些奇怪的 *** 作.

因为有一些 *** 作,可以将cin,cout和scanf,printf的同步取消.

Q:为什么代码中间会多加一些空行?

A:主要是为了好看,习惯把差不多的一部分放到一起.

#include 
#include 

using namespace std;

int main() {
	double n1, s1, p1; // 分别对应 产品编号、产品数量、产品单价
	double n2, s2, p2;

	cin >> n1 >> s1 >> p1;
	cin >> n2 >> s2 >> p2;

	printf("VALOR A PAGAR: R$ %.2lfn", s1 * p1 + s2 * p2);
	
	return 0;
}
// 运行时间: 15 ms
// 运行空间: 208 KB 
AcWing 612. 球的体积

原题链接

给定你一个球体的半径 R R R,请你计算球体的体积。

计算球体的公式为 V = ( 4 / 3 ) × π × R 3 V=(4/3)times π times R^3 V=(4/3)×π×R3。

π π π 取 3.14159 3.14159 3.14159。

注意:有些语言中 ( 4 / 3 4/3 4/3) 无法得到 1.3333 … 1.3333… 1.3333…,建议在公式中使用 ( 4 / 3.0 4/3.0 4/3.0)。

输入格式

输入一个整数 R R R。

输出格式

输出格式为 VOLUME = X,其中 X 为球体的体积,结果保留三位小数。

数据范围

1 ≤ R ≤ 2000 1≤R≤2000 1≤R≤2000

输入样例:

3

输出样例:

VOLUME = 113.097

时/空限制:1s / 64MB
来源:语法题
算法标签:顺序结构

yxc’s Solution

在C++语言中,两个整数相除会整除,而如果代码写成这样:

printf("VOLUME = %.3lfn", 4 / 3 * 3.14159 * r * r * r);

答案就会出现错误,因为算术运算符的优先级是相同的,则在计算时,会从左到右依次计算,此时先算4 /3的结果,则并不会让数据类型从整数类型的转换到浮点数类型,造成答案不正确.所以在计算时,将前两个数中的任意一个变为浮点数,就可以进行数据类型的强制转换,得到正确的结果了.

#include 

int main() {
	double r;
	scanf("%lf", &r);

	printf("VOLUME = %.3lfn", 4.0 / 3 * 3.14159 * r * r * r);
    
    return 0;
}
// 运行时间: 10 ms
// 运行空间: 216 KB
AcWing 613. 面积

原题链接

给定三个浮点数 A A A, B B B 和 C C C。

然后,计算如下图形的面积:

    底边为 A A A,高为 C C C 的三角形。半径 C C C 的圆。( π = 3.14159 π=3.14159 π=3.14159)底边为 A A A 和 B B B,高为 C C C 的梯形。边长为 B B B 的正方形。边长为 A A A 和 B B B 的长方形。

输入格式

输入共一行,包含三个保留一位小数的浮点数 A A A, B B B, C C C。

输出格式

输出共五行,形式如下所示:

第一行,格式为 TRIANGULO: X,其中 X 为所求三角形面积。

第二行,格式为 CIRCULO: X,其中 X 为所求圆形面积。

第三行,格式为 TRAPEZIO: X,其中 X 为所求梯形面积。

第四行,格式为 QUADRADO: X,其中 X 为所求正方形面积。

第五行,格式为 RETANGULO: X,其中 X 为所求长方形面积。

所有答案保留三位小数。

数据范围

0 ≤ A , B , C ≤ 10000.0 0≤A,B,C≤10000.0 0≤A,B,C≤10000.0

输入样例:

3.0 4.0 5.2

输出样例:

TRIANGULO: 7.800
CIRCULO: 84.949
TRAPEZIO: 18.200
QUADRADO: 16.000
RETANGULO: 12.000

时/空限制:1s / 64MB
来源:语法题
算法标签:顺序结构

yxc’s Solution
    底边为 A A A,高为 C C C 的三角形的面积为 S 1 = A C 2 S_1=frac{AC}{2} S1​=2AC​;半径 C C C 的圆的面积为 S 2 = π C 2 S_2=pi C^2 S2​=πC2;底边为 A A A 和 B B B,高为 C C C 的梯形的面积为 S 3 = ( A + B ) × C 2 S_3=frac{(A+B)times C}{2} S3​=2(A+B)×C​;边长为 B B B 的正方形的面积为 S 4 = B 2 S_4=B^2 S4​=B2;边长为 A A A 和 B B B 的长方形的面积为 S 5 = A B S_5=AB S5​=AB.

这道题目没有什么可讲的,主要是为了训练.

在初学语法知识点时,会花很多很多的时间在题目上,因为编程以实践为主.

在编程的过程当中,可能会遇到各种各样的问题,学到各种各样的知识点.

#include 

int main() {
	double a, b, c;
	scanf("%lf%lf%lf", &a, &b, &c);
	
	printf("TRIANGULO: %.3lfn", a * c / 2);
	printf("CIRCULO: %.3lfn", 3.14159 * c * c);
	printf("TRAPEZIO: %.3lfn", (a + b) * c / 2);
	printf("QUADRADO: %.3lfn", b * b);
	printf("RETANGULO: %.3lfn", a * b);
    
    return 0;
}
// 运行时间: 10 ms
// 运行空间: 216 KB 
AcWing 607. 平均数2

原题链接

读取三个浮点数 A A A, B B B 和 C C C 的值,对应于三个学生的成绩。

请你计算学生的平均分,其中 A A A 的成绩的权重为 2 2 2, B B B 的成绩的权重为 3 3 3, C C C 的成绩的权值为 5 5 5。

成绩的取值范围在 0 0 0 到 10 10 10 之间,且均保留一位小数。

输入格式

输入共三行,每行包含一个浮点数,第一行表示 A A A,第二行表示 B B B,第三行表示 C C C。

输出格式

输出格式为 MEDIA = X,其中 X 为平均分,结果保留一位小数。

数据范围

0 ≤ A , B , C ≤ 10.0 , 0≤A,B,C≤10.0, 0≤A,B,C≤10.0,

输入样例:

5.0
6.0
7.0

输出样例:

MEDIA = 6.3

时/空限制:1s / 64MB
来源:语法题
算法标签:顺序结构

yxc’s Solution

平 均 数 = 2 A + 3 B + 5 C 10 平均数=frac{2A+3B+5C}{10} 平均数=102A+3B+5C​.

#include 

int main() {
	double a, b, c;
	scanf("%lf%lf%lf", &a, &b, &c);
	
	printf("MEDIA = %.1lfn", (a * 2 + b * 3 + c * 5) / 10);
	
    return 0;
}
// 运行时间: 10 ms
// 运行空间: 216 KB
AcWing 610. 工资和奖金

原题链接

请你编写一个程序,给定你一个销售人员的名字,底薪以及月销售额。

请你计算他的月收入是多少。

已知月收入等于底薪加 15 % 15% 15% 的月销售额。

所有数据保留两位小数。

输入格式

输入第一行包含一个由大写字母构成的长度不超过 10 10 10 的字符串,表示销售人员的名字。

第二行包含一个浮点数,表示该人员的底薪。

第三行包含一个浮点数,表示该人员的月销售额。

输出格式

输出格式为 TOTAL = R$ X,X 为该人员月收入。

数据范围

0 ≤ 底 薪 , 月 销 售 额 ≤ 10000.00 0≤底薪,月销售额≤10000.00 0≤底薪,月销售额≤10000.00

输入样例:

JOAO
500.00
1000.00

输出样例:

TOTAL = R$ 650.00

时/空限制:1s / 64MB
来源:语法题
算法标签:顺序结构

yxc’s Solution

这里要求先读入一个字符串,实际上有点超纲,这里简单介绍一下:

在C++语言中,有一种存储字符串的数据类型,叫string;

string类型的变量只能用cin来读入.

#include 
#include 

using namespace std;

int main() {
	string name;
	cin >> name;

	double x, y;
	cin >> x >> y;

	printf("TOTAL = R$ %.2lfn", x + y * 0.15);
    
    return 0;
}
// 运行时间: 18 ms
// 运行空间: 220 KB 
AcWing 614. 最大值

原题链接

给定三个整数,请你找出它们中的最大值。

下列公式可能对你有所帮助:

m a x ( a , b ) = ( a + b + ∣ a − b ∣ ) 2 max(a,b)=frac{(a+b+|a-b|)}{2} max(a,b)=2(a+b+∣a−b∣)​

输入格式

输入占一行,包含三个整数。

输出格式

输出格式为 X eh o maior,其中 X X X 为三个数中的最大值。

数据范围

1 ≤ 给 定 整 数 ≤ 1 0 9 1≤给定整数≤10^9 1≤给定整数≤109

输入样例:

7 14 106

输出样例:

106 eh o maior

时/空限制:1s / 64MB
来源:语法题
算法标签:顺序结构

yxc’s Solution

m a x ( a , b ) = ( a + b + ∣ a − b ∣ ) 2 max(a,b)=frac{(a+b+|a-b|)}{2} max(a,b)=2(a+b+∣a−b∣)​ 是否正确呢?

证明

    如果 a > b a>b a>b,则 ∣ a − b ∣ = a − b |a-b|=a-b ∣a−b∣=a−b,有 ( a + b + ∣ a − b ∣ ) 2 = ( a + b + a − b ) 2 = 2 a 2 = a frac{(a+b+|a-b|)}{2}=frac{(a+b+a-b)}{2}=frac{2a}{2}=a 2(a+b+∣a−b∣)​=2(a+b+a−b)​=22a​=a;如果 a ⩽ b a leqslant b a⩽b,则 ∣ a − b ∣ = b − a |a-b|=b-a ∣a−b∣=b−a,有 ( a + b + ∣ a − b ∣ ) 2 = ( a + b + b − a ) 2 = 2 b 2 = b frac{(a+b+|a-b|)}{2}=frac{(a+b+b-a)}{2}=frac{2b}{2}=b 2(a+b+∣a−b∣)​=2(a+b+b−a)​=22b​=b;

故可以通过这一式子计算出 a , b a,b a,b 之中的最大值.

证毕

在iostream头文件中,有一个abs函数,可以返回某个数(整数和浮点数均可)的绝对值,用法为abs(x).

其中x是整数,就会得到一个整数;若x是一个浮点数,则会得到一个浮点数.

如果去求三个数的最大值呢?

先求出前两个数的最大值 t = m a x ( a , b ) t=max(a,b) t=max(a,b),再和第三个数求一遍最大值 m a x ( t , c ) max(t,c) max(t,c) 即可.

#include 

using namespace std;

int main() {
	int a, b, c;
	cin >> a >> b >> c;

	int t = (a + b + abs(a - b)) / 2;
	int r = (t + c + abs(t - c)) / 2;

	cout << r << " eh o maior" << endl;
   
    return 0;
}
// 运行时间: 17 ms
// 运行空间: 248 KB 
AcWing 617. 距离

原题链接

两辆汽车在同一地点,同时,沿同一方向前进。

一辆车的速度为 60    k m / h 60 ;km/h 60km/h,另一辆车的速度为 90    k m / h 90; km/h 90km/h。

显然,快车与慢车的距离会不断拉开,每过一个小时( 60 60 60 分钟),两车的距离就拉开 30 30 30 公里。

现在,告诉你两车之间的距离为 L L L 公里,请你求出两车已经行驶了多长时间?

输入格式

输入包含一个整数 L L L,表示两车之间的距离。

输出格式

输出格式为 X minutos,其中 X 为已经行驶的时间,单位为分钟。

数据范围

1 ≤ L ≤ 1 0 9 1≤L≤10^9 1≤L≤109

输入样例:

30

输出样例:

60 minutos

时/空限制:1s / 64MB
来源:语法题
算法标签:顺序结构

yxc’s Solution

因为每过一小时,两车就会拉开 30 30 30 公里,则设现在两车之间的距离为 L L L 公里,问过了多少分钟?

既然一小时,即 60 60 60 分钟会拉开 30 30 30 公里,则显然每 2 2 2 分钟会拉开 1 1 1 公里;则现在两车的距离为 L L L 公里,则经过了 2 L 2L 2L 分钟.

这里如果使用如下代码会错误:

cout << l / 0.5 << " minutos" << endl;

因为0.5默认为一个double类型的浮点数(在 64 64 64 位 *** 作系统中),当浮点数有效位数过多时,cout会输出一个科学计数法的表示形式,这里可以用强制类型转换使其变成整数后输出,如:

cout << (int)(l / 0.5) << " minutos" << endl;
#include 

using namespace std;

int main() {
	int l;
	cin >> l;
	cout << 2 * l << " minutos" << endl;
    
    return 0;
}
// 运行时间: 10 ms
// 运行空间: 224 KB 
AcWing 618. 燃料消耗

原题链接

一辆汽车每行驶 12 12 12 公里需要消耗 1 1 1 升汽油,现在告诉你该汽车的行驶速度 S S S( k m / h km/h km/h)和行驶时间 T T T( h h h),请你计算该车在行驶过程中一共消耗了多少升汽油。

输入格式

输入共两行,第一行包含一个整数 T T T,表示行驶时间( h h h)。

第二行包含一个整数 S S S,表示行驶速度( k m / h km/h km/h)。

输出格式

输出行驶期间的总油耗,结果保留三位小数。

数据范围

1 ≤ T , S ≤ 1 0 9 1≤T,S≤10^9 1≤T,S≤109

输入样例:

10
85

输出样例:

70.833

时/空限制:1s / 64MB
来源:语法题
算法标签:顺序结构

yxc’s Solution

总共行驶的公里数为 S × T S times T S×T,则消耗的汽油为 S × T 12 frac{Stimes T}{12} 12S×T​ 升.

#include 

int main() {
	double s, t;
	scanf("%lf%lf", &s, &t);
	printf("%.3lf", s * t / 12);
	
    return 0;
}
// 运行时间: 10 ms
// 运行空间: 216 KB 
AcWing 656. 钞票和硬币

原题链接

读取一个带有两个小数位的浮点数,这代表货币价值。

在此之后,将该值分解为多种钞票与硬币的和,每种面值的钞票和硬币使用数量不限,要求使用的钞票和硬币的数量尽可能少。

钞票的面值是 100 , 50 , 20 , 10 , 5 , 2 100,50,20,10,5,2 100,50,20,10,5,2。

硬币的面值是 1 , 0.50 , 0.25 , 0.10 , 0.05 1,0.50,0.25,0.10,0.05 1,0.50,0.25,0.10,0.05 和 0.01 0.01 0.01。

输入格式

输入一个浮点数 N N N。

输出格式

参照输出样例,输出每种面值的钞票和硬币的需求数量。

数据范围

0 ≤ N ≤ 1000000.00 0≤N≤1000000.00 0≤N≤1000000.00

输入样例:

576.73

输出样例:

NOTAS:
5 nota(s) de R$ 100.00
1 nota(s) de R$ 50.00
1 nota(s) de R$ 20.00
0 nota(s) de R$ 10.00
1 nota(s) de R$ 5.00
0 nota(s) de R$ 2.00
MOEDAS:
1 moeda(s) de R$ 1.00
1 moeda(s) de R$ 0.50
0 moeda(s) de R$ 0.25
2 moeda(s) de R$ 0.10
0 moeda(s) de R$ 0.05
3 moeda(s) de R$ 0.01

时/空限制:1s / 64MB
来源:语法题
算法标签:顺序结构

yxc’s Solution

这样的题目并不是为了恶心大家,而是为了让大家得到充分的训练.

写一种代码,一定要刷够一定的行数才可以,写够这么多行数,自然就会了.

和653. 钞票相同,要尽可能地使用面值更大的钞票和硬币;这道题如果直接用浮点数来说,会出现精度问题,所以需要将 N N N 先转化为整数,因为 N N N 只有两位小数,所以可以将单位从元换算成分; N N N 最多为 1000000.00 1000000.00 1000000.00 元,则换算成分则最多有 100000000 100000000 100000000 分,没有超出整数类型的表示范围.

#include 

int main() {
	double m;
	scanf("%lf", &m);
	int n = m * 100;

	printf("NOTAS:n");
	printf("%d nota(s) de R$ 100.00n", n / 10000);
	n %= 10000;
	printf("%d nota(s) de R$ 50.00n", n / 5000);
	n %= 5000;
	printf("%d nota(s) de R$ 20.00n", n / 2000);
	n %= 2000;
	printf("%d nota(s) de R$ 10.00n", n / 1000);
	n %= 1000;
	printf("%d nota(s) de R$ 5.00n", n / 500);
	n %= 500;
	printf("%d nota(s) de R$ 2.00n", n / 200);
	n %= 200;
	printf("MOEDAS:n");
	printf("%d moeda(s) de R$ 1.00n", n / 100);
	n %= 100;
	printf("%d moeda(s) de R$ 0.50n", n / 50);
	n %= 50;
	printf("%d moeda(s) de R$ 0.25n", n / 25);
	n %= 25;
	printf("%d moeda(s) de R$ 0.10n", n / 10);
	n %= 10;
	printf("%d moeda(s) de R$ 0.05n", n / 5);
	n %= 5;
	printf("%d moeda(s) de R$ 0.01n", n);

    return 0;
}
// 运行时间: 10 ms
// 运行空间: 208 KB
AcWing 655. 天数转换

原题链接

读取对应于一个人的年龄(以天为单位)的整数值,并转化为年,月和日表示方式输出,年、月、日分别对应 ano(s), mes(es), dia(s)。

注意:为了方便计算,假设全年 365 365 365 天,每月 30 30 30 天。 数据保证,不会出现 12 12 12 个月和几天的情况,例如 360 , 363 360,363 360,363 或 364 364 364。

输入格式

输入一个整数 N N N。

输出格式

参照输出样例,输出转换后的天数表达。

数据范围

1 ≤ N ≤ 1000000 1≤N≤1000000 1≤N≤1000000

输入样例:

400

输出样例:

1 ano(s)
1 mes(es)
5 dia(s)

时/空限制:1s / 64MB
来源:语法题
算法标签:顺序结构

yxc’s Solution

不会出现 12 12 12 个月和几天的情况,是因为题目规定一年有 365 365 365 天,但每个月只有 30 30 30 天,这样每年实际上应该只有 30 × 12 = 360 30 times 12 = 360 30×12=360 天;

为了避免再进行麻烦的计算,这里作出了简化,即数据保证答案不涉及到 12 12 12 月的情况.

年数为 ⌊ n 365 ⌋ lfloorfrac{n}{365}rfloor ⌊365n​⌋;月数为 ⌊ n % 365 30 ⌋ lfloorfrac{n%365}{30}rfloor ⌊30n%365​⌋;天数为 n % 365 % 30 n%365%30 n%365%30.

#include 

using namespace std;

int main() {
	int n;
	cin >> n;

	cout << n / 365 << " ano(s)" << endl;
	cout << n % 365 / 30 << " mes(es)" << endl;
	cout << n % 365 % 30 << " dia(s)" << endl;
    
    return 0;
}
// 运行时间: 20 ms
// 运行空间: 216 KB 

本文档基于 AcWing语法基础课 制作

视频链接:1.1习题及1.2 判断语句 - AcWing

文档版本:

var1.0 完成于2022.01.31.

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5714825.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存