蓝桥杯刷题——平面分割(找规律)

531 阅读2分钟

「这是我参与2022首次更文挑战的第22天,活动详情查看:2022首次更文挑战」。

这种题目也是蓝桥杯常有的一类题目,其实就是要技巧,所用到的原理仅仅只是一些初中知识,但是要求我们熟练的用程序正确的表达出。想明白原理就很简单了,甚至于我们可以自己多找几个例子,然后一步步找出规律,再用程序表达,总之这类题目不难,但要求要仔细,对基本语法熟练,不然知道规律却表达不出。

题目

20个圆和20条直线最多能把平面分成多少个部分?

思路

我们从最简单的入手,先是我们不用圆,先只用一根直线,这个时候将平面分成了2两个部分,再之后呢,我们再加一根直线去分割,加一根直线,现在是最多几个部分呢?现在将平面能最多分成4个部分,然后再加一根直线呢,现在是三根直线,最多可以将平面分成7个部分,再加一根,就是四根,最多可以将平面分成11个部分。

IMG_20220212_202643.jpg 如图所示,我想大家也能看出规律来了,每添加一根线,就是添加当前共有的直线的根数。本来是一根的,加一根,就是加两个平面,本来是两根的,加一根就是加三个平面。

现在我们再把圆加上,看看有什么规律,本来是两根直线,分成四个部分,现在加一个圆,分成几个部分了呢?两线一圆最多是8个部分,再加圆,两线两圆最多是14个部分,两线三圆是22个部分。

IMG_20220212_203648.jpg 我们来仔细观察一下啊,多了一个圆,这个圆最多可以与每条原有的直线有两个交点,还可以与原有的圆最多有两个交点,而每多一个交点,就会多一个部分,很明显,规律也出来了,我们只需要先计算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;
}