**已关闭。**此问题需要debugging details。当前不接受答案。
编辑问题以包含desired behavior, a specific problem or error, and the shortest code necessary to reproduce the problem。这将有助于其他人回答问题。
昨天关门了。
Improve this question
我正在一个C++程序中寻找三角形的面积,并根据其面积的升序对它们进行排序,然而,由于测试数据表明一些三角形的面积是相同的,三角形名称的输出将被替换。(例如,如果三角形2的面积=三角形6的面积,则输出的名称将都是三角形6)我认为问题是来自for循环中的一个索引,但我想不出解决的办法。
下面是代码:
#include<iostream>
#include<cmath>
#include<iomanip>
using namespace std;
class Triangle
{
private:
int a,b,c;
public:
Triangle(){}
Triangle(int s1, int s2, int s3)
{
a=s1;
b=s2;
c=s3;
}
double area()
{
double s=(double)(a+b+c)/2;
return(sqrt((s*(s-a)*(s-b)*(s-c))));
}
};
int main()
{
int n,s1,s2,s3,i;
cout<<"Enter a number between 1 and 10:"<<endl;
cin>>n;
Triangle* arr=new Triangle[n];
double *areaT = new double [n];
for(i=0;i<n;i++)
{
cout<<"Enter the sides of triangle "<<(i+1)<<": \n";
cin>>s1>>s2>>s3;
arr[i]=Triangle(s1,s2,s3);
areaT[i]=arr[i].area();
}
double *ar = new double [n];
for(i=0;i<n;i++)
{
ar[i]=areaT[i];
}
cout<<fixed<<setprecision(2);
for(int k=0;k<n;k++)
{
for(int j=0;j<n-k-1;j++)
{
if(areaT[j]>areaT[j+1])
{
double t=areaT[j];
areaT[j]=areaT[j+1];
areaT[j+1]=t;
}
}
}
cout<<"\n\n";
int *aIndex = new int [n];
for(i=0;i<n;i++)
{
for(int p=0;p<n;p++)
{
if(areaT[i]==ar[p])
{
aIndex[i]=p;
}
}
}
for(i=0;i<n;i++)
{
cout<<"Area of Triangle "<<(aIndex[i]+1)<<": "<<areaT[i]<<endl;
}
return 0;
}
我尝试使用break语句,但它不起作用,预计可以显示两个三角形的名称,而不是由于相同的区域而替换其中一个名称
1条答案
按热度按时间w8f9ii691#
你可以使用一个布尔数组来检查给定的路是否被遍历过一次,如果被遍历过一次,你就不需要再检查了,只要进一步迭代,找到下一个合适的值..我附上你的代码沿着小的调整