关于相交线产生区域问题和错误排序
来源:互联网 发布:淘宝店铺名字大全高档 编辑:程序博客网 时间:2024/05/17 22:30
今天在杭电上做题目时碰到一题说求N条折线最多能分割多少个区域的问题。花了一个小时,把折线和直线的情况都推了一边,算是做个笔记吧
直线情况 : 当一条直线时 ,有2个区域。两条直线,四个区域,此时有1个交点,三条直线要有3个交点才能产生最多区域。
我们可以发现,每增加一条直线,交点数目增加 n-1个,n-1即为第n条直线与前N-1条直线都有交点。而n-1个交点会多增加N-2个区域,同时还有两个射线,增加两个,即我们可以得到 A[n]=A[n-1]+n获得递推公式,然后可以解得A[n]=(n*n+n+2)/2;
折线情况:当有一条折线时,有2个区域,两条折线时,有7个区域;
每增加一条折线,交点个数增加4n-4,设交点个数为B[n];B[n]=B[n-1]+4*n-4;4*n-4是怎么来的呢?它表示的是n-1条折线共有2(n-1)条射线,增加一条折线,折线的每边都与这2(n-1)条射线有交点,则即为4*n-4;再联系上面直线情况,则增加的区域数目为4*n-6;两条射线增加2个区域,还有就是顶点增加一个区域,最终得到递推公式为
A[n]=A[n-1]+4*n-3,根据递推公式,A[n]=2*n*n-n+1;
错误排序。说的是有N个卡片,写着N个不同人的名字,让这N个人都拿一张,问每个人拿到的卡片上名字写的都不是自己共有多少种情况或概率;
这道题我一开始想着用循环和递归,将一个大小为N 按升序排列的数组进行操作,就比如A[0]我把1——N-1之间的数分别与它交换,然后同样处理后面的数字,研究半天也没研究出来,后来就果断换方法了。研究N-1和N的关系,设错误排序的总和为A[N];A[N]=A[N-1]*(N-1)+A[N-2]*(N-1);A[N-1]*(N-1)表示的是:当前N-1个已经是完全错误排序,那么我增加一个,使得达到N个,第N个可以与前N-1个任意一个进行交换顺序,使得N个都完全错误排序,A[N-2]*(N-1)表示:当前N-1个只有一个拿着自己名字的卡片,这个人我们是随便从N-1个人中挑选出来的,然后将这个人与第N 个人交换,使得N个达到完全错误排序,如果前N-1个人中,超过1个人拿到写着自己名字的卡片,那么,N个人无法完成错误排序,即A[N]=A[N-1]*(N-1)+A[N-2]*(N-1);
- 关于相交线产生区域问题和错误排序
- 链表有环和相交问题
- 关于ORA-01000错误产生的原因和解决办法
- 关于CAD二次开发中(范围线自相交)相交线的问题
- 关于快速排序的错误问题
- 关于srand()和rand()产生随机数的一点问题
- 概述正确和错误区域
- 概述正确和错误区域
- 关于变量存储区域问题
- 扫描线 n个立方体相交区域大于等于三次的体积和 hdu3642 Get The Treasury
- 相邻问题和区域问题
- 矩形相交 判断 - 相交区域坐标计算
- linux 关于编译模块缺少config.h而产生错误的问题
- 关于Linux 下的错误路由产生火星包的问题
- 关于pthread_create创建线程, 产生segment错误。
- 关于recvfrom产生10054的错误
- 一个关于插入查找和排序问题
- 【MySQL】关于字符集和其排序问题
- [热身题][hdoj_1060]Leftmost Digit
- uva 140 - Bandwidth
- div+css中如何将层随着滚动条的移动的初始位置固定在导航栏左下方
- iPhone开发之深入浅出 (4) — ARC之循环参照
- 有关Linux内核和Android源代码学习的计划
- 关于相交线产生区域问题和错误排序
- pthread_create()
- iPhone开发之深入浅出 (5) — ARC之Outlet与弱引用
- openSSh
- AWR/ADDM/ASH 报告
- GINA之XmlParser和XmlSlurper异同
- linux read 用法
- Eclipse快捷键大全
- activity生命周期