一个数学问题
“给定一个凸N边形,满足性质:任何三条对角线都不交于同一点。在这样一个多边形的内部,它的所有对角线共形成多少个交点呢?我的算法是:给N边形N个点从1到N编号,先确定第一个点,再确定第二个点(和第一个点不重合也不相邻),这样这两点构成一条直线,再确定第三个点(不和前两个点重合),再确定第四个点(不和前三点重合且不和第三点相邻),这样第三和第四个点又能构成一条直线,两条直线确定一个交点。可是编的程序除了输入N为1时输出0外,输入其它的数都没有结果输出,请问这是为什么啊?还有我的算法可行吗?
我的程序是:
#include <stdio.h>
#include <math.h>
int main()
{
int i,j,p,k,n; /* i,j,p,k分别为第一个,第二个,第三个,第四个点*/
unsigned long x=0;/* x用来计算交点个数*/
scanf("%d",&n);
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
{
if((i==1&&j==n)||(i=n&&j==1))/*挖去这种"特殊"的相邻的情况,下同*/
continue;
if(fabs(i-j)<=1) /*挖去相邻和重合的情况*/
continue;
for(p=1;p<=n;p++)
{
if(p==i||p==j) /*挖去第三点和前两点重合的情况*/
continue;
for(k=1;k<=n;k++)
{
if(k==i||k==j) /*挖去第四点和前两点重合的情况*/
continue;
if(fabs(p-k)<=1)
continue; /*挖去第四点和第三点重合或相邻的情况*/
if((k==1&&p==n)||(k==n&&p==1)) /*挖去第三和第四点相邻的情况*/
continue;
x++; /*如果能执行到这步就可以构成交点,所以x加1*/
}
}
}
printf("%ld",x/8); /*按这种算法同一个交点重复算了8次*/
return 0;
}
[ 本帖最后由 miss_you 于 2009-11-13 22:52 编辑 ]