读书人

哪位高手能告诉小弟我这个程序错在哪

发布时间: 2012-02-19 19:43:39 作者: rapoo

谁能告诉我这个程序错在哪?
#include <iostream.h>
#include <math.h>
void main()
{
int u=0;
long int sum=0;
int ss[100000]={0};
int lac,lab,lbc,p,s;
for(int j=0;j <=18;j++){
for(int i=0;i <=18;i++){
for(int w=0;w <=18;w++){
for(int q=0;q <=18;q++){
for(int r=0;r <=18;r++){
for(int e=0;e <=18;e++){
lac=sqrt((i-e)*(i-e)+(j-r)*(j-r));
lab=sqrt((i-q)*(i-q)+(j-w)*(j-w));
lac=sqrt((q-e)*(q-e)+(w-r)*(w-r));
p=(lac+lab+lbc)/2;
s=sqrt(p*(p-lac)*(p-lab)*(p-lbc));
if(lac+lab> lbc){
if(s!=0){
ss[u]=s;
u++;
}
}
}
}
}
}
}
}
for(int k=0;ss[k]!=0;k++)sum++;
int fi,se,m;
long int sum1=0;
for(fi=0;fi <sum-1;fi++){
m=fi;
for(se=fi+1;se <sum;se++){
if(ss[se]==ss[m])
sum1++;
}
}
cout < <sum-sum1 < <endl;
}
是想编已知三角形的三个顶点坐标都在0到18范围内
问能组成面积不同的三角形多少个

[解决办法]
在你的计算中,
使用的都是 int,
而事实上,
可能面积相差的是0.几, 或者更小,
所以,
应当对某些变量使用 float,有必要的话使用 double 类型计量。
[解决办法]
...
float lac,lab,lbc,p,s; //改成 float 数据类型
for(int j=0;j <=18;j++){
for(int i=0;i <=18;i++){
for(int w=0;w <=18;w++){
for(int q=0;q <=18;q++){
for(int r=0;r <=18;r++){
for(int e=0;e <=18;e++){
lac=sqrt(float((i-e)*(i-e)+(j-r)*(j-r))); //sqrt 参数没有 int 版本的,调用歧义
lab=sqrt(float((i-q)*(i-q)+(j-w)*(j-w))); //强制转化参数类型,显示调用 float 版本
lac=sqrt(float((q-e)*(q-e)+(w-r)*(w-r))); //的sqrt 函数
...
[解决办法]
晕,好多for啊,是不是输入的时候输入了实数?
我没看到你程序中有float or double型的变量
------解决方案--------------------


sqrt开方很大可能是小数,int型时数据不准确。
[解决办法]
应当对某些变量使用 float,有必要的话使用 double 类型计量。
======================================================================

基本上不要使用float,遇到浮点运算全部使用double就对了。

读书人网 >C++

热点推荐