# re: 第三届全国高校程序设计大赛赛题问题5:导线交叉 回复 更多评论
2006-01-14 20:49 by
这个并不复杂,其实很简单的。就是判断一下上一排端子右侧的端子相连的下一排的端子是否小于他相连的端子,小于就相交。
# re: 第三届全国高校程序设计大赛赛题问题5:导线交叉 回复 更多评论
2006-01-15 10:37 by
To hnhls99 :
上面结论不难得出,还要考虑的一个问题就是是交叉点重复得个数。也就是说最后得出的交叉点总数必须减掉重复的点。
# re: 第三届全国高校程序设计大赛赛题问题5:导线交叉 回复 更多评论
2006-01-15 10:58 by
看题好像没有计算重复点吧,如果计算的话上面的图中的交点数可能就不够22个了.
如果要计算的话,我想可以用方程来表示线,计算出每个交点的坐标来.
# re: 第三届全国高校程序设计大赛赛题问题5:导线交叉 回复 更多评论
2006-01-15 21:22 by
To 学习笔记:
有没有比较简单的方法去计算重复的点呢?
# re: 第三届全国高校程序设计大赛赛题问题5:导线交叉 回复 更多评论
2006-01-16 10:12 by
用方程计算比较麻烦,要自己定义坐标系,计算方程的解。可以保证的一点是肯定可以实现。可能这种方法就是最简单的了。
# re: 第三届全国高校程序设计大赛赛题问题5:导线交叉 回复 更多评论
2006-03-26 11:50 by
可以根据相似三角形的性质很简单了推出,交点的高和水平位置,再根据这个来判断交点是否重合,这样应该比解方程简单点。
# re: 第三届全国高校程序设计大赛赛题问题5:导线交叉 回复 更多评论
2007-05-18 12:59 by
#include<stdio.h>
#include<malloc.h>
void main()
{
int n,m,i,j,k,count=0;
int *a;
scanf("%d",&m);
for(i=0;i<m;i++)
{
scanf("%d",&n);
a=(int *)malloc(n*sizeof(int));
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
for(j=0;j<n;j++)
{
for(k=j+1;k<n;k++)
{
if(a[j]<a[k]) count++;
}
}
printf("%d\n%d\n",i,count);
}
}