解题思路:
即如果新添加与前面直线无交点(平行),则增加一个平面。如果与前面的直线有不同的交点,平面数增加交点数+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 人评分
C语言程序设计教程(第三版)课后习题6.9 (C语言代码)浏览:744 |
C语言训练-求具有abcd=(ab+cd)2性质的四位数 (C语言代码)浏览:1392 |
C语言程序设计教程(第三版)课后习题5.7 (C语言代码)浏览:1045 |
C语言训练-角谷猜想 (C++代码)(3N+1问题)浏览:1850 |
妹子杀手的故事 (C语言代码)浏览:737 |
C语言程序设计教程(第三版)课后习题11.3 (C语言代码)浏览:1071 |
大小写转换 (C语言代码)浏览:904 |
C语言程序设计教程(第三版)课后习题11.1 (C语言代码)浏览:724 |
【亲和数】 (C语言代码)浏览:908 |
字符串对比 (C语言代码)浏览:1471 |