C++ 学习分享专栏介绍持续更新
# 前言
这段时间发现了C语言的超强练习场地洛谷
,从简单题开始刷陆陆续续刷了不少,在处理好markdown的公式模块后会陆陆续续更新出来
# 学习的知识点
# 输出多行字符串
一共三种方法
提示
字符串需要使用""进行输入
# 方法一:cout搭配换行符\n或者endl
#include<iostream>
using namespace std;
int main() {
cout << " ********\n";
cout << " ************\n" ;
cout << " ********"<<endl;
cout << " ........... #...# #...#"<< endl;
cout << " ##*####### #.#.# #.#.#"<< endl;
...
...
...
return 0;
}
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
# 方法二:printf搭配\n
#include<stdio.h>
int main() {
printf(
" ********\n"
" ************\n"
" ####....#.\n"
" %%%#@#**@*\n"
)
return 0;
}
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
# 分支类题目
# P2181 对角线 (数学题)
题目描述:
对于一个 nn 个顶点的凸多边形,它的任何三条对角线都不会交于一点。请求出图形中对角线交点的个数。
例如,6边形:
解法一: 公式法
这个由计算公式
对于任意外凸多变形
n为边数
代码
#include<bits/stdcpp.h>
using namespace std;
unsigned long long n,ans;
int main()
{
scanf("%lld",&n);
ans=n * (n-1) / 2 * (n-2) / 3 * (n-3) / 4;
printf("%lld\n",ans);
return 0;
}
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
解法二: 数列法
有位大佬的题解, 非常神奇,做差值,发现是数列形式
边数 | 交点数 | 做差01 | 02 | 03 |
---|---|---|---|---|
1 | 0 | |||
2 | 0 | |||
3 | 0 | 0 | ||
4 | 1 | 1 | 1 | |
5 | 5 | 4 | 3 | 2 |
6 | 15 | 10 | 6 | 3 |
7 | 35 | 20 | 10 | 4 |
8 | 70 | 35 | 15 | 5 |
逐层表达出即可
//#include<cstdio>
#include<iostream>
//#include<cmath>
using namespace std;
long long a1[100000];//定义数组,长度100000
long long a2[100000];//longlong为64位长整型,最大可到2^64次方
long long a3[100000];//数组默认每个数字都是0
int main(){
long long n;
cin >> n;
int t = 0;
for(int i = 1; i <= n; i++)
{
a1[i] = a1[i - 1] + i; //生成1,3,6,10序列
} //这里只有i-1才能让下一个运算中用上上一位的数字,不然会出现
// a[3]=a[3]+i; 而a[3]还没定义默认是0
for(int i=1; i<=n; i++)
{
a2[i] = a2[i - 1] + a1[i]; //生成1,4,10,20序列
//本质就是让表格的 “02列” + 01列上减去下的插值,刚好等于01列
}
for (int i = 1; i <= n;i++)
{
a3[i] = a3[i - 1] + a2[i]; //生成1,5,15,35序列
//同理得到交点数
}
cout << a3[n-3];
return 0;
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# P5709 限定时间吃苹果 (向上取整)
题目: 八尾勇喜欢吃苹果。她现在有 。
吃完一个苹果需要花费
吃完一个后立刻开始吃下一个。现在时间过去了
请问她还有几个完整的苹果?
这个题目陷阱很多,首先是题目给的数字范围, 必须要考虑吃的速度为0个/分钟时的情况(约等于光速吃苹果),所以答案要写0
有时候太高估自己的代码了,其实漏洞百出
#include<cstdio>
#include<iostream>
#include<cmath>
using namespace std;
int main(){
int m , a , t, s;
cin >> m >> t >> s;
if ( t == 0 )
{
cout << 0 << endl;
return 0; //等于中途暂停
}
a = m-ceil((double)s/t);//向上取整,ex:9.5取10
if(a<=0)
{
cout << 0;
}
else cout << a;
return 0;
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# P1421 算钱能买多少东西
问题描述
班主任给小玉一个任务,到文具店里买尽量多的签字笔。已知一只签字笔的价格是 11 元 99 角,而班主任给小玉的钱是 a元 b 角,小玉想知道,她最多能买多少只签字笔呢?
问题很简单, 就不过多解释了
#include<iostream>
#include<bits/stdcpp.h>
#include<math.h>
using namespace std;
int main() {
int a, b, c;
cin >> a >> b;
a *= 10;//将元转化为角
c = a + b;
int f = 19;
cout << c / f;
return 0;
}
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
# P5708 三角形面积计算 (数学知识海伦公式, 代码强制转换)
题目描述
一个三角形的三边长分别是 a、b、c,那么它的面积为
,其中
。输入这三个数字,计算三角形的面积,四舍五入精确到 1 位小数。
保证能构成三角形,
每个边长输入时不超过2位小数。
#include<iostream>
#include<bits/stdcpp.h>
#include<math.h>
using namespace std;
int main() {
double a, b, c;
double p;
double s;
cin >> a >> b >> c;
p = 1.0*(a + b + c) / 2;
cout << setprecision(1) << fixed << pow(1.0 * p * (p - a) * (p - b) * (p - c), 1.0 / 2) << endl;
return 0;
}
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
显式强制转换,例如:
int a=65;规范化
char b=char(a);
2
2
执行该语句段后,a的值为65,而b的值是“a”。 隐式强制转换,例如:
int a;
double b=3.88;
a=b;
2
3
2
3
执行该语句段后,b的值为3.88,而a的值是 3。 这是为什么呢?
因为,在赋值运算中,赋值号两边量的数据类型不同时,赋值号右边量的类型将转换为左边量的类型。如果右边量的数据类型长度比左边长时,将丢失一部分数据,这样会降低精度,丢失的部分直接舍去。 若参与运算量的类型不同,则先转换成同一类型,然后进行运算。转换类型按以下几个顺序进行:
- 转换按数据长度增加的方向进行,以保证精度不降低。如intint型和longlon**g型运算时,先把intint量转成longlon**g型后再进行运算。
- 若两种类型的字节数不同,转换成字节数高的类型
- 若两种类型的字节数相同,且一种有符号,一种无符号,则转换成无符号类型
- 所有的浮点运算都是以双精度进行的,即使仅含float单精度量运算的表达式,也要先转换成double型,再作运算
- char型和 short型参与运算时,必须先转换成int
# P2433 综合题(数学根号,幂运算库math.h)
问题 1
请输出 I love Luogu!
问题 2
这里有 10 个苹果,小A 拿走了 2 个,Uim 拿走了 4 个,八尾勇拿走剩下的所有的苹果。我们想知道:
- 小A 和 Uim 两个人一共拿走多少苹果?
- 八尾勇能拿走多少苹果?
现在需要编写一个程序,输出两个数字作为答案,中间使用空格分开。
问题 3
现在有 14 个苹果。要均分给 4 名同学,分不掉的苹果放回冰箱。请问:
每位同学能分得几个苹果?
一共分出去多少苹果?
把几个苹果放回冰箱?
现在需要编写一个程序,输出三个数字作为答案,每个数字一行。
问题 4
现在有 500 毫升的肥宅快乐水,要均分给 3 名同学,每位同学可以分到多少毫升?请输出一个数字作为输出。保留 6 位有效数字,且不使用科学计数法。
问题 5
甲列火车长 260 米,每秒行 12 米;乙列火车长 220 米,每秒行 20 米,两车相向而行,从两车车头相遇时开始计时,多长时间后两车车尾相离?已知答案是整数。
问题 6
一个长方形长宽分别是 6cm、9cm,求它的对角线长度(cm)。直接使用 cout 输出。
问题 7
Uim 银行账户里面有100元。经过了下面的操作:
往里面存了 10 元;
购物花掉了 20 元;
把里面的钱全部取出。
请在每次操作后输出账户余额,并使用换行符隔开。
问题 8
当半径为 r=5,请输出圆的周长、面积和球体积。取 π=3.141593。请直接使用 cout 输出答案,每行一个数字。
问题 9
一只小猴买了若干个桃子。第一天他刚好吃了这些桃子的一半,又贪嘴多吃了一个;第二天他也刚好吃了剩余桃子的一半,贪嘴多吃了一个;第三天他又刚好吃了剩下的桃子的一半,并贪嘴多吃了一个。第四天起来一看,发现桃子只剩下一个了。请问小猴买了几个桃子?
问题 10 这是一道小学奥数题
洛谷的评测任务可以看作是均匀增加的。8 台评测机 30 分钟可以刚好把评测队列中的程序评测完毕(测试时间中任务也在增加),10 台评测机 6 分钟可以刚好把评测队列中的程序评测完毕,请问几台评测机可以在 10 分钟时刚好把评测队列中的程序评测完毕?
问题 11
小A跑步速度 5m/s,八尾勇跑步速度 8m/s,八尾勇在小A后面 100m,他们同时起跑,请问需要多长时间八尾勇可以追上小A?输出一个数字表示答案,使用 cout 直接输出。
问题 12
大家都知道有 26 个英文字母,其中A是第一个字母。现在请编程求出:
- M 是字母表中的第几个字母?
- 第 18 个字母是什么?
输出一个数字和一个字母,使用换行隔开。
int main()
{
cout << 'M'-'A'+1 << endl;//单引号就可以直接调用字符的ascii码
char c12 = ('A' + 17);//定义char就是用单引号,可以直接加上数
cout << c12 << endl;
}
2
3
4
5
6
2
3
4
5
6
问题 13 求解高次开跟,直接用 pow() 函数即可配合分数幂
小 A 有两块球形橡皮泥,一个半径是 4,一个半径是 10。他想把这两块橡皮泥揉在一起,然后塑造成一个正方体,请问这个正方体的棱长是多少?如果结果不是整数,则舍去小数点之后的数字。取 Π = 3.141593π=3.141593。
这里答案写错了,不过无伤大雅,记得时4/3Π R^3即可
int main()
{
double pai13 = 3.141593;
double a13 = pai13 * pow(4, 2);
double b13 = pai13 * pow(10, 2);
double c13 = a13 + b13;
cout << pow(c13,1.0/3) << endl;//这里记得一定要写成1.0不然就会舍掉小数部分
}
2
3
4
5
6
7
8
2
3
4
5
6
7
8
正确写法
int main()
{
double pai13 = 3.141593;
double a13 = 4.0/3*pai13 * pow(4, 3);
double b13 = 4.0/3*pai13 * pow(10, 3);
double c13 = a13 + b13;
cout << pow(c13,1.0/3) << endl;//这里记得一定要写成1.0不然就会舍掉小数部分
}
2
3
4
5
6
7
8
2
3
4
5
6
7
8
问题 14
根据咕咕网校的预测,当课程定价为 110 元时,会有 10 人报名。如果课程价格每降低 1 元,就会多 1 名报名者(反之亦然)。如果希望总共能收到 3500 元学费的话,那么应该定价多少呢?已知本题有两个答案符合要求,则取较小的那一个。如果这个答案不是整数,则需四舍五入精确到整数。
这是一个解方程的题目,设减价x元
自己设计了一个算法用于枚举方程, 答案解决问题下面
# 已经解决的问题
得到方程(110 - x)(10 + x) = 3500,这里想用for循环枚举求解方程答案,但是失败了
解决方法:
- 首先得移项, x在左常数在右边, 语言本身没那么智能
- 得用==符号, 因为=符号常用于表示赋值
int main()
{
int x;
for (int x = 1; x >= 100; x++)
{
if ((110 - x)(10 + x) = 3500)//表达式必须是可修改的左值?没看懂
break;
}
cout << x << endl;
}
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
正确写法
#include<iostream>
#include<bits/stdcpp.h>
#include<math.h>
using namespace std;
int main()
{
int a14, b14;
//设减价幅度为x
for (int x = 1; x <= 100; x++)//运用for循环,把减价幅度x从1到100都试一遍
{
if (pow(x, 2) - 100 * x == -2400//化简成这个形式即可
{
//cout << x << endl;
a14 = x;//注意:这里的外部定义内部赋值不能写成int a14 = x; 会被识别成新的int
break;
}
}
for (int y = 100; y >= 1; y--)
{
if (pow(y, 2) - 100 * y == -2400)
{
//cout << y << endl;
b14 = y;//注意:这里的外部定义内部赋值不能写成int b14 = x; 会被识别成新的int
break;
}
}
if (110 - a14 > 110 - b14)//进行一次对比,如果减价方案一比减价方案二大,则选择减价方案二
{
cout << 110 - b14 << endl;
}
else//与前面的if反之
{
cout << 110 - a14 << endl;
}
return 0;
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
# 源代码
#include<iostream>
#include<bits/stdcpp.h>
#include<math.h>
using namespace std;
int main()
{
int T;
cin >> T;
if (T == 1)
{
cout << "I love Luogu!";
}
else if(T ==2)
{
int a = 10;
int s1 = 2;
int s2 = 4;
int s3 = a - s1 - s2;
cout << s1 + s2 << " " << s3;
}
else if (T == 3)
{
int a3 = 14;
int s3 = 4;
cout << a3 / s3 << endl << 4 * (a3 / s3) << endl << a3 % s3 << endl;
}
else if (T == 4)
{
double a4 = 500;
int b4 = 5;
cout << setprecision(6) << a4 / b4 << endl;
}
else if (T == 5)
{
int a5 = 260;
int b5 = 220;
int s5 = 12;
int d5 = 20;
cout << (a5 + b5) / (s5 + d5) << endl;
}
else if (T == 6)
{
int a6 = pow(6,2);
int b6 = pow(9,2);
cout << sqrt(a6+b6) << endl;
}
else if (T == 7)
{
int a7 = 100;
a7 += 10;
cout << a7 <<endl;
a7 -= 20;
cout << a7 << endl;
a7 -= 90;
cout << a7 << endl;
}
else if (T == 8)
{
double r = 5;
double pai = 3.141593;
cout << 2 * r * pai << endl;
cout << pow(r, 2)*pai << endl;
cout << 4.0 / 3.0 * pai * pow(r, 3) << endl;
}
else if (T == 9)
{
cout << (((((1+1)*2)+1)*2)+1)*2 << endl;
}
else if (T == 10)
{
cout << "9" << endl;
}
else if (T == 11)
{
cout << 100.0 / 3.0 << endl;
}
else if (T == 12)
{
cout << 'M'-'A'+1 << endl;
char c12 = ('A' + 17);
cout << c12 << endl;
}
else if (T == 13)
{
/*double pai13 = 3.141593;
double a13 = pai13 * pow(4, 2);
double b13 = pai13 * pow(10, 2);
double c13 = a13 + b13;
cout << setprecision(0)<<fixed << pow(c13,1.0/3) << endl;*/
double pai13 = 3.141593;
cout << (int)(pow(4.0 / 3 * pai13 * (4 * 4 * 4 + 10 * 10 * 10), 1.0 * 1 / 3));
}
else if (T == 14)
{
int a14, b14;
for (int x = 1; x <= 100; x++)
{
if (pow(x, 2) - 100 * x == -2400)
{
//cout << x << endl;
a14 = x;
break;
}
}
for (int y = 100; y >= 1; y--)
{
if (pow(y, 2) - 100 * y == -2400)
{
//cout << y << endl;
b14 = y;
break;
}
}
if (110 - a14 > 110 - b14)
{
cout << 110 - b14 << endl;
}
else
{
cout << 110 - a14 << endl;
}
}
return 0;
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
# P5706 分发快乐水(控制输出精度)
题目: 每个人分发快乐水, 一人两杯, 输入快乐水总量, 以及人数, 给出每个人能分到的快乐水总量以及需要的杯子数
setprecision(精度值) 设置输出精度(以数字左边为基准)
fixed 固定精度点为小数点处(可以用此配合上面的函数输出指定小数点后的位数)
#include<iostream>
#include<bits/stdcpp.h>
using namespace std;
int main() {
double t;
int n;
cin >> t >> n;
cout << setprecision(3) << fixed <<t / n << endl << 2 * n;
return 0;
}
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
# P1425 鱼儿游泳(时间运算)
题目: 这一天,小鱼给自己的游泳时间做了精确的计时(本题中的计时都按24小时制计算),它发现自己从
a时b分一直游泳到当天的c时d分,请你帮小鱼计算一下,它这天一共游了多少时间呢?
知识点: 涉及到时间运算的知识点, 原本构想是转换运算进制, 但这里其实只需要小时减去小时, 分钟减去分钟, 同时运用 if 进行借位相减即可
#include<iostream>
#include<bits/stdcpp.h>
using namespace std;
int main() {
int a, b, c, d;
cin >> a >> b >> c >> d;
int q = c - a; int w = d - b;
if (w < 0) {
q--, w += 60;//小时数自减1,同时让小于0的分钟数加上60,
//等于 60-一个复数,得到借位后的结果
}
cout << q << " " << w;
return 0;
}
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
# P5705 反转输入内容 (字符串知识)
发现两种写法,一种是正经写法,采用
STL库内函数
reverse( 数组名 .begin().begin() ,, 数组名 .end().end() )😉;
可实现直接反转
#include<iostream>
using namespace std;
int main()
{
string a;
cin >> a;
reverse(a.begin(), a.end());
cout << a;
return 0;
}
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
方法1.5:
函数:str.size() 获取字符串长度
#include<iostream>
using namespace std;
string a;//先定义一个字符串
int main() {
cin>>a;
//下面的a.size()就可以获得这个字符串的长度
for(int i=a.size()-1;i>=0;i--)//
cout<<a[i];
return 0;
}
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
# 未理解点
int main() {
//这里size-1或者不减一结果都是一样的,但理论来说size-1
//会导致第一个变成了“.xxx”挺奇怪的,可是实际结果却是一样的
for(int i=a.size()-1;i>=0;i--)//
for(int i=a.size();i>=0;i--)
return 0;
}
2
3
4
5
6
7
2
3
4
5
6
7
我的骚操作:直接输入一个double复数,乘于10变为整数赋值int
利用取余运算获取常量的个,十,百,千,位,在输出时调转。
注意s*10并不会改变s必须要有=某个数,第四行
int main() {
double s;
cin >> s;
s *= 10;//s*10 = int c 才能赋值,如果要原地乘必须用*=
int a = s;
int b[5];
b[1] = a % 1000 % 100 % 10;
b[2] = a % 1000 % 100 / 10;
b[3] = a % 1000 / 100;
b[4] = a / 1000;
cout << b[1] << b[2] << b[3] << "." << b[4];
return 0;
}
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
# P5704 大小写转换(ascii码调用)
这道题主要掌握的知识点是:类型转换并不会改变元数据,只会改变结果
代码注释部分有解释
a和A的ascii码分别是97,65
#include<iostream>
using namespace std;
int main() {
//97 65
char z;
cin >> z;
char a= (int)(z-32);
cout << a;
//转换类型只会体现在结果上,对原来的数据没有影响
/*(int)(z - 32);
cout << z;*/ //输出结果还是原来的式子
return 0;
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# P1035 级数累加 (累加问题)
题目:
一个式子累加,1+ 1/2 + 1/3 + ... + 1/n 当n无穷大时理论上可以算出一切数,则输入一个数字,并找出刚好满足其的n的值,即刚好到达指定大小
思路:
设置一个while循环,配合自增运算符不断自增,同时兼顾复数所需要的运算形式,采用double运算(精度更高)
#include<iostream>
using namespace std;
//一个式子累加,1+ 1/2 + 1/3 + ... + 1/n 当n无穷大时理论上可以算出一切数,则输入一个数字,并找出刚好满足其的n的值
//即刚好到达指定大小
int main()
{
int n = 1, k;
double s = 0;//因为是复数,所以要运用到double
cin >> k;
while (s <= k) {
s += 1.0 / n;
n++;
}
cout << n - 1 << endl;
return 0;
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# P1008 数字组合题 (枚举算法并设置条件判断)
题目:1,2,3,4,5,6,7,8,9排列组合成三个数,使得三个数呈1:2:3的比例且每个数中的元素不重复
#include<stdio.h>
#include<iostream>
using namespace std;
int main()
{
//题目:1,2,3,4,5,6,7,8,9排列组合成三个数,使得三个数呈1:2:3的比例且每个数中的元素不重复
for (int i = 123; i < 333; i++)//从最小的排列组合123开始自增循环,最大不超过333(超过333最后一个数字就超过1000了)
{
int a[4], b[4], c[4];//定义三个数组括号里写的是数组位数,习惯性会写10,因为会自动添加一个字符所以最少写4(三位数)
a[1] = i % 100 % 10;//获取i的个位数,123%100=23 23%10=3 取余获得余数刚好是个位数
a[2] = i % 100 / 10;//获取i的十位数 123%100=23 23/10=2 cpp除法自动取整不会保留小数
a[3] = i / 100;//获取i的百位数 123/100=1 获得百位
b[1] = 2 * i % 100 % 10;//乘上2,按题目要求得到 比例为“2”的一组数
b[2] = 2 * i % 100 / 10;
b[3] = 2 * i / 100;
c[1] = 3 * i % 100 % 10;//乘上3,同理
c[2] = 3 * i % 100 / 10;
c[3] = 3 * i / 100;
if (a[1] * a[2] * a[3] * b[1] * b[2] * b[3] * c[1] * c[2] * c[3]==362880 && a[1] + a[2] + a[3] + b[1] + b[2] + b[3] + c[1] + c[2] + c[3]==45)
//上面这一行是把所有1~9的数字乘起来加起来,如果不重复数字结果一定是固定的,乘起来362880 加起来45
{
cout << i << " " << i * 2 << " " << i * 3 << endl;//打印即可
}
}
return 0;
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# P1046 摘苹果题 (设置数组并判断条件)
这道题运用了数组得知识点,填充数组并进行对比
#include<iostream>
using namespace std;
//题目:第一行输入每个苹果的高度,第二行输入摘苹果人的身高,附加条件是一把30cm高的椅子,求最后能摘下来的苹果的数量
int main()
{
int arr[20];//定义一个数组
int 椅子高 = 30;
int TH; //定义触碰的高度,但因为要后面输入指定数字所以没写,用cin输入
int ans = 0; //摘下的苹果数,在没有进行判断前,默认0
//10个数组放10个苹果的高度
for (int i = 0; i < 10; i++)
{
cin >> arr[i];//运用for循环填充每一个数组的内容
}
cin >> TH;//输入能够碰到的高度
for (int i = 0; i < 10; i++) //运用for循环让每一个数组轮流出场,进行判断
{
if (arr[i] <= (椅子高 + TH))//判断数组(苹果高度)与椅子高度加触碰高度的大小,满足则ans自增1
ans++;
}
//获取数据后输出ans的数字,即能够摸到苹果的数量
cout << ans << endl;
return 0;
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29