【问题描述】用直线对圆进行一次分割,可以把圆分成两块。第二次分割,最多可以分成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、递归算法