蓝桥杯刷题记录打卡之三角形

文章提供了几个C++代码示例,分别用于检查给定的三条边是否能构成三角形(根据两边之和大于第三边的原则),以及打印特定的图形(如三角形或等腰三角形)。此外,还提到了海伦公式计算三角形面积的方法,并展示了保留精度的输出技巧。
摘要由CSDN通过智能技术生成
#include <iostream>
using namespace std;
int main()
{
    int i,m,j;
    char c;
    cin >> c;
    for(i = 1;i <= 3; i++)
    {
        for(m = 1;m <= 5; m++)
        {
            if(m == 4-i)
            {
                for(j = 1; j<=1+(i-1)*2;j++)
                cout << c;
                m +=(i-1)*2;
            }
            else 
                cout << " ";      
        }
                cout << endl;
    }
    return 0;
}

这里介绍下我的题解思路,先尝试这打印每一行的内容(设置外循环),然后通过补齐其余的图形找到行数与输出字符位置的对应关系,位置一与对应的行数匹配开始打印并且通过行数与结束位置的对应关系结束打印。

代码如下:组成三角形的条件任意两边之和大于第三边,任意两边之差小于第三边。

#include <iostream>
using namespace std;
int main()
{
    int a,b,c;
    cin>>a>>b>>c;
    if((a<b+c && a>abs(c-b)) || (b<a+c && b>abs(a-c)) || (c<a+b && c>abs(a-b)))
    {
        cout<<"yes";
    }
    else
    {   cout<<"no";
    }
}

代码如下:表达式记得别写重复

#include <iostream>
using namespace std;
#include <cmath>
int main()
{
    int a,b,c;
    cin>>a>>b>>c;
    if((a<b+c && a>abs(c-b)) || (b<a+c && b>abs(a-c)) || (c<a+b && c>abs(a-b)))
    {
        cout<<"Yes";
    }
    else
    {   cout<<"No";
    }
}

代码如下:

#include <iostream>
using namespace std;
int main()
{
    int a,b,c;
    cin>>a>>b>>c;
    if (a+b>c && b+c>a && a+c>b ){
    if (a*a+b*b == c*c)
    {
            cout<<"yes";
    } else if(a*a + c*c == b*b){
            cout<<"yes";
    } else if(c*c + b*b == a*a){
            cout<<"yes";
    } else
            cout<<"no";
}
      else 
            cout<<"no";
    
 }

老实说看到这个题目有点儿懵逼,不过我很快就觉得可以把这个三角形变换一下,不难发现其实每行打印就是左边一列的数字,初始值是行数的累加,并且对于每个数列而言下一个数字等于前面的数字加上它所在的行。

海伦公式;已知三角形的三边a, b, c 求三角形的面积S=sqrt(p(p-a)(p-b)(p-c));p=(a+b+c)/2;

保留精度:

#include <iomanip>

cout << fixed << setprecision(n) << x;

n 为对应保留几位小数,x为对应的数字。

#include <iostream>
#include <cmath>
#include <iomanip>
using namespace std;
int main()
{
       double a, b, c;
        cin >> a >> b >> c;
        if (a + b > c && a + c > b && b + c >a){
             double p = (a + b + c) / 2;
             double sqrts = p*(p-a)*(p-b)*(p-c);
             double s = sqrt(sqrts);
                   cout << fixed << setprecision(2) << s; 
        } else {
                cout << "No answer";
        }
        return 0;
}
#include <iostream>
using namespace std;
int main()
{
        int a, b;
        int m;
        cin >> a >> b;
        for(int i = 1; i < a+b; i++)
        {   
      
                if(i+a>b && i+b>a )
                { 
                   m = i;              
                }
        }
        cout << m ;
}
#include  <iostream>
#include  <cmath>
using namespace std;
int main()
{
       int a, b, c;
        cin >> a >> b >> c;
        if(a+b > c && a+c > b && c+b>a){
           if(pow(a,2)+pow(b,2)==pow(c,2)||pow(a,2)+pow(c,2)==pow(b,2)
              ||pow(c,2)+pow(b,2)==pow(a,2)){
              if(a < b)
                    a = b; 
              if(a < c)
                    a = c;
                int hypotenuse = pow(a,2);
                cout << hypotenuse;
                    
           } else {
                   int temp;
                   if(a < b){
                        temp =a;
                        a = b; 
                        b =temp;}
                   if(a < c){
                        temp = a;
                        a = c;
                        c = temp;}   
                   if(b < c)
                        b = c;  //三个数确定最大的数其余的数也要对应变换,否则会有数据丢失。
                   int hymax = pow(a,2) + pow(b,2);
                   cout << hymax;
           }
            
             
        }
        return 0;
}

#include <iostream>
#include <cmath>
using namespace std;
int main()
{
        int  c, N, cnt = 0;
        cin >> N;
        for(int c = N / 2 + 1; c < N; c++)
        {   
                   
                       int m = sqrt(pow(N,2) - pow(c,2));
                      if(pow(m,2) + pow(c,2) == pow(N,2) && m <= c ){
                                   cnt += m/2 ; 
                      
                        }
                }
        cout << cnt;
        

        return 0;
}

本人水平有限,如有错误恳请指正。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值