「这是我参与2022首次更文挑战的第22天,活动详情查看:2022首次更文挑战」。
这种题目也是蓝桥杯常有的一类题目,其实就是要技巧,所用到的原理仅仅只是一些初中知识,但是要求我们熟练的用程序正确的表达出。想明白原理就很简单了,甚至于我们可以自己多找几个例子,然后一步步找出规律,再用程序表达,总之这类题目不难,但要求要仔细,对基本语法熟练,不然知道规律却表达不出。
题目
20个圆和20条直线最多能把平面分成多少个部分?
思路
我们从最简单的入手,先是我们不用圆,先只用一根直线,这个时候将平面分成了2两个部分,再之后呢,我们再加一根直线去分割,加一根直线,现在是最多几个部分呢?现在将平面能最多分成4个部分,然后再加一根直线呢,现在是三根直线,最多可以将平面分成7个部分,再加一根,就是四根,最多可以将平面分成11个部分。
如图所示,我想大家也能看出规律来了,每添加一根线,就是添加当前共有的直线的根数。本来是一根的,加一根,就是加两个平面,本来是两根的,加一根就是加三个平面。
现在我们再把圆加上,看看有什么规律,本来是两根直线,分成四个部分,现在加一个圆,分成几个部分了呢?两线一圆最多是8个部分,再加圆,两线两圆最多是14个部分,两线三圆是22个部分。
我们来仔细观察一下啊,多了一个圆,这个圆最多可以与每条原有的直线有两个交点,还可以与原有的圆最多有两个交点,而每多一个交点,就会多一个部分,很明显,规律也出来了,我们只需要先计算20条最多化成几个部分,再一个个加圆,最终就能算出最多能化成几个部分了。
总代码
#include <bits/stdc++.h>
using namespace std;
int main()
{
int cnt=0;
cnt+=2;
for(int i=2;i<=20;i++){
cnt+=2*(i-1);
}
cnt+=40;
for(int i=2;i<=20;i++){
cnt+=40+i;
}
cout<<cnt;
return 0;
}