alison-f

【问题描述】用直线对圆进行一次分割,可以把圆分成两块。第二次分割,最多可以分成4块。第三次最多可以分成7块(如图)。给定正整数N(1≤N≤65535),求经过N次分割后,最多能把圆分成多少块。
【输入文件】从标准输入读取输入。只有一个整数N,代表分割的次数。
【输出文件】向标准输出打印结果。输出只有一个数字,是经过N次分割后最多分成的块数。在行末要输出一个回车符。
【输入样例】 3
【输出样例】 7
【样例说明】把圆分割三次,最多可以分成7块

--------------------

不会做,把标答默了一遍。

标答:

#include <stdio.h>

int cut(int n);

int main(){
    int n;
    scanf("%d",&n);
    printf("%d\n",cut(n));
    getchar();
    return 0;
}

int cut(int n){
    if(n==1)
        return 2;
    else
        return (cut(n-1)+n);
}

-------------------

1、圆分割问题:

  要想把圆分成的块数最多,那么增加的每一条线都不能过前面所有的交点。分析如下:
  圆面本身是一个部分;
  第一条直线只能穿过一个部分(圆面本身),画第一条直线时圆面加一个部分,圆面最多分成(1+1)=2(块);
  第二条直线只能穿过两个部分,画第二条直线时圆面加两个部分,圆面最多分成(1+1+2)=4(块);
  第三条直线只能穿过三个部分,画第三条直线时圆面加三个部分,圆面最多分(1+1+2+3)=7(块);
  第四条直线能穿过四个部分,画第四条直线时圆面力四个部分,圆面最多分(1+1+2+3+4)=11(块);
  依次类推可得,n条直线最多能将圆面分成[1+(1+2+3+4+…+n)](块)

2、递归算法

分类:

技术点:

相关文章: