用C语言解决一个数学问题

来源:百度知道 编辑:UC知道 时间:2024/06/18 07:15:59
“给定一个凸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++)
{

答案就是组合数C(n)4
你想多了,而且效率太低,有很多条件没用上
i<k<j<p
循环限制条件i<n-2,i<k<n-1,k<j<n,j<p<=n,条件都满足时x++
没有重复算
直接得出结果x