YTZeri


私信TA

用户名:dotcpp0609730

访问量:431

签 名:

等  级
排  名 5317
经  验 1493
参赛次数 0
文章发表 3
年  龄 0
在职情况 学生
学  校
专  业

  自我简介:

TA的其他文章

解题思路:

即如果新添加与前面直线无交点(平行),则增加一个平面。如果与前面的直线有不同的交点,平面数增加交点数+1个


注意事项:


直线重合以及直线平行的情况


参考代码:

#include <stdio.h>

#include <stdbool.h>

int a[1000];                  //存放每条直线的斜率

int b[1000];                  //存放常数项

double x[1000];               //x,y 存放交点坐标

double y[1000];

int main()

{

    int i,j;

    int n;

    int sum=0;                          //平面分成了sum个部分

    scanf("%d",&n);                     //直线的数量n

    for(i=1;i<=n;i++)

    {

        scanf("%d%d",&a[i],&b[i]);     //输入每条直线的两个系数 a,b

        bool flag=false;               //标记是否存在重合直线 false表示不重合

        for(j=1;j<i;j++)

        {

            if(a[j]==a[i]&&b[j]==b[i])   //判断直线是否重合

            {

                flag=true;

                break;

            }

        }

        if(!flag)              //如果与之前的直线不重合 找交点的个数

        {

            if(i==1)          //第一条直线的情况 将平面分为2部分

            {

                sum=2;

            }

            else

            {

                for (j = 1; j < i; j++) //找与前面直线的交点

                {

                    if (a[i] == a[j])   //如果平行 则没有交点 进行下一次循环

                    {

                        continue;

                    }

                    else

                    {

                        x[j] = 1.0 * (b[i] - b[j]) / (a[j] - a[i]); //求出交点坐标

                        y[j] = a[i] * x[j] + b[i];

                        flag = false;                              //标记是否有相同交点

                        for (int k = 1; k < j; k++)                //判断是否有相同交点

                        {

                            if (x[j] == x[k] && y[j] == y[k])

                            {

                                flag = true;

                                break;

                            }

                        }

                        if (!flag)                      //交点不相同,sum++

                        {

                            sum++;

                        }

                    }

                }

                sum += 1;           //不管有无交点,最后都加1

            }

        }

    }

    printf("%d",sum);

    return 0;

}


 

0.0分

2 人评分

看不懂代码?想转换其他语言的代码? 或者想问其他问题? 试试问问AI编程助手,随时响应你的问题:

编程语言转换

万能编程问答

代码解释器

  评论区

判断相同交点那里为什么是break,可以解答一下吗
2023-03-17 11:19:17
  • «
  • 1
  • »