解题思路:
即如果新添加与前面直线无交点(平行),则增加一个平面。如果与前面的直线有不同的交点,平面数增加交点数+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语言程序设计教程(第三版)课后习题7.3 (C语言代码)浏览:593 |
不容易系列2 (C语言代码)浏览:589 |
【偶数求和】 (C语言代码)浏览:556 |
A+B for Input-Output Practice (VII) (C语言代码)浏览:521 |
2004年秋浙江省计算机等级考试二级C 编程题(1) (C语言代码)浏览:581 |
字符串输入输出函数 (C语言代码)浏览:2478 |
1118(求助_已解决)浏览:329 |
简单的a+b (C语言代码)浏览:818 |
1052题解(链表操作)浏览:651 |
C语言程序设计教程(第三版)课后习题11.3 (C语言代码)浏览:635 |