防止由于相同的结果而在C++中替换输出[已关闭]

r8uurelv  于 2022-11-19  发布在  其他
关注(0)|答案(1)|浏览(124)

**已关闭。**此问题需要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语句,但它不起作用,预计可以显示两个三角形的名称,而不是由于相同的区域而替换其中一个名称

w8f9ii69

w8f9ii691#

你可以使用一个布尔数组来检查给定的路是否被遍历过一次,如果被遍历过一次,你就不需要再检查了,只要进一步迭代,找到下一个合适的值..我附上你的代码沿着小的调整

#include<bits/stdc++.h>
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];
    bool check[n];
    memset(check,n,true);

  for(i=0;i<n;i++)
    {
        for(int p=0;p<n;p++)
        {
            if(areaT[i]==ar[p] && check[p]==true)
            {
                aIndex[i]=p;
                check[p]=false;
            }
        }
    }
    for(i=0;i<n;i++)
    {
         cout<<"Area of Triangle "<<(aIndex[i]+1)<<": "<<areaT[i]<<endl;
    }
    
    return 0;
}

相关问题