83 条题解

  • 103
    @ 2022-5-20 20:26:51

    三角形两边之和大于第三边,差会小于第三边。上代码!

        #include <bits/stdc++.h>
        using namespace std;
        int main()
        {
            int a,b,n;
            cin >> a >> b;
            if(a>b)//两边之差的判断条件
            {
                n=a-b;
            }
            else
            {
                n=b-a;
            }
            cout << a+b-n-1;//算出结果(一个取值范围内的数)
            return 0;
        }
    

    日常第十二题,嗨害嗨~~~

  • 57
    @ 2022-8-3 20:53:39

    来吧同志们,今天我又来做题啦!三角形的题目大家都做习惯了没?代码来喽~(有注释)

    ```
    #include <bits/stdc++.h>
    using namespace std;
    int main()
    {
        int a,b,sum=0;
        cin >> a >> b;
        if (a > b)
            sum = a - b;
        else
            sum = b - a;
        cout << (a + b) - sum - 1; //公式:边长和-边长差-1
        return 0;
    }
    ```
    
    • 38
      @ 2023-8-8 13:24:08

      三角形的特性

      我们先看题目:

      小X很喜欢三角形,原因之一是三角形具有稳定性。
      也就是说,给定三角形的三条边长,它的形状也随之确定了。
      现在小X想画一个三条边长都是正整数的三角形,
      其中两条边的长度分别是a和b,第三条边的长度还没有确定。
      小X想知道他能画出多少种不同的三角形。
      

      这里面有很多废话,精简一下,就是: 给出三角形的两条边,求,第三边有几种可能(边长皆为正整数)。

      枚举

      有不少人第一步可能就是想到了枚举,但是,我觉得这道题用枚举和用O(1)的算式没差,都运用到了三角形的两个特性。

      三角形的特性

      1. 三角形的两边之和,大于第三边。
        • 大意就是,三角形有a1、a2、a3三条边,它们符合a1+a2>a3,a1+a3>a2,a2+a3>a1。这也很好理解,如: image 这个三角形的三条边就符合上面的条件,所以他能组成三角形。
        • 但如果a1+a2<=a3,那么就会出现a1和a2成了一条直线,都难以够到a3,无法组成三角形。
      2. 三角形两边之差,小于第三边。三角形有a1、a2、a3三条边,它们符合abs(a1-a2)<a3,abs(a1+a3)<a2,abs(a2-a3)<a1。其中abs是绝对值的意思。
        • 这个也很好解释,如果a1-a2>=a3,那么a3+a2就会<=a1,这不符合上面这个性质。

      题目 思路

      回到题目,我们已经知道,只要符合上面这两个特性,就能组成三角形。而且,符合特性的数是有规律的,比如,如果3,8都可以当第三边,那么4、5、6、7也都可以当成第三边。

      • 利用这个特性,我们就可以有思路。

        1. 求出符合条件的最小值。
        2. 求出符合条件的最大值。
        3. 在这区间内的所有数,都是符合条件的。所以,我们用最大值-最小值+1就可以得出答案了。
      • 我们可以根据特性一计算,算出第最大值就是a1+a2-1。

      • 根据特性二,我们可以算出最小值是abs(a1-a2)+1。

      • 之后我们根据第三步,可能取值的个数是(a1+a2-1)-(abs(a1-a2)+1)。

      • 简化后可的AC代码


      AC代码(求赞):

      #include <bits/stdc++.h>
      using namespace std;
      int main()
      {
          int a,b;
          cin>>a>>b;//输入a,b。
          cout<<(a+b)-abs(a-b)-1;
          //简化后的算式。
          return 0;
      }
      
    • 30
      @ 2022-8-20 19:32:45
      #include <iostream>
      using namespace std;
      int main()
      {
          long long a, b;
          cin >> a >> b;
          if (a > b)
          {
              cout << a + b - (a - b) - 1;
          }
          else if (a < b)
          {
              cout << a + b - (b - a) - 1;
          }
          else
          {
              cout << a + b - 1;
          }
          return 0;
      }
      
      • 18
        @ 2023-7-10 20:09:56

        这类题的小技巧: 可能有整数解的个数为(2×较短边长度+1) 所以代码非常简单~

        上代码!😄


        if 语句的作用: 确保a≥b,即可使用b进行计算

        #include <bits/stdc++.h> 
        using namespace std;
        int main()
        {
            int a, b, d;
            cin >> a >> b;
            if(b > a)
            {
                d = a;
                a = b;
                b = d;
            }
            cout << b * 2 - 1 << endl;
            return 0;
        }
        

        我承诺此代码无bug,使用可0.0秒AC通过

        • @ 2023-8-1 21:10:14

          我也承诺此代码无bug,使用可0.0秒AC通过

        • @ 2023-8-4 13:01:06

          我更承诺此代码无bug,使用可0.0秒AC通过

        • @ 2023-8-4 20:48:09

          我也承诺此代码无bug,使用可0.0秒AC通过

        • @ 2023-8-7 19:35:50

          我承认此代码无bug,仅用0.0秒即可通过^_^

        • @ 2023-8-8 20:23:48

          我也承诺此代码无bug,使用可0.0秒AC通过

        • @ 2023-8-9 12:38:45

          这题是错的,别被他们骗了!!!😕

        • @ 2023-8-9 16:49:53

          很好用,0,0s 无bug

        • @ 2023-8-10 13:45:54

          我也承诺此代码无bug,使用可0.0秒AC通过^.^

        • @ 2023-8-12 15:56:03

          我承诺此代码无bug,使用可0.0秒AC通过

        • @ 2023-8-12 15:57:00

          哪路大神解释一下?👀️

        • @ 2023-8-20 11:41:30

          我也承诺此代码无bug,使用可0.0秒AC通过

        • @ 2023-8-29 13:14:55

          我也承诺此代码无bug,使用可0.0秒AC通过

        • @ 2023-9-18 20:16:45

          我也承诺此代码有bug,使用可100000000秒WA通过@

        • @ 2023-12-3 18:22:32

          我也承诺此代码无bug,使用可0.0秒AC通过

        • @ 2023-12-21 19:25:48

          我也承诺此代码无bug,使用可0.0秒AC通过

        • @ 2024-1-10 15:30:13

          我也承诺此代码无bug,使用可0.0秒AC通过

        • @ 2024-2-5 16:35:28

          我也承诺此代码无bug,可0.0秒AC通过~

        • @ 2024-2-14 16:56:31

          我也承诺此代码无bug,使用可0.0秒AC通过👍 👍

        • @ 2024-3-10 14:55:50

          总感觉怪怪的

        • @ 2024-3-10 14:57:59

          我也承诺此代码无bug,使用可0.0秒AC通过

        • @ 2024-5-28 20:03:49

          我也承诺此代码有101%的bug,可999年WA通过 列表: #1:Wrong Answer -1分 TEL:3141592653589793Hour 1024TB System Wornning: C:\ 99.98GB/99.98GB D:\1023.982GB/1023.982GB Today Is 2097年13月32 下面省略。。。

        • @ 2024-5-28 20:04:40

          求赞

        • @ 2024-5-28 20:05:06

          我也承诺此代码有101%的bug,可999年WA通过 列表: #1:Wrong Answer -1分 TEL:3141592653589793Hour 1024TB System Wornning: C:\ 99.98GB/99.98GB D:\1023.982GB/1023.982GB Today Is 2097年13月32 下面省略。。。

        • @ 2024-5-28 20:05:23

          我也承诺此代码有101%的bug,可999年WA通过 列表: #1:Wrong Answer -1分 TEL:3141592653589793Hour 1024TB System Wornning: C:\ 99.98GB/99.98GB D:\1023.982GB/1023.982GB Today Is 2097年13月32 下面省略。。。

        • @ 2024-5-28 20:05:48

          我也承诺此代码有101%的bug,可999年WA通过 列表: #1:Wrong Answer -1分 TEL:3141592653589793Hour 1024TB System Wornning: C:\ 99.98GB/99.98GB D:\1023.982GB/1023.982GB Today Is 2097年13月32 下面省略。。。

      • 12
        @ 2023-1-31 14:14:37

        #include<iostream>

        using namespace std;

        int main()

        {

        int a,b,n;
        
        cin>>a>>b;
        
        if(a>b)
        
        {
        
            n=(a+b)-1-(a-b);
        
        }
        
        else
        
        {
        
            n=(a+b)-1-(b-a);
        
        }
        
        cout<<n;
        
        return 0;
        

        }

      • 6
        @ 2023-8-3 8:06:04

        三角形的特性

        三角形有两个特性

        1. 两边之和大于第三边。
        2. 两边之差小于第三边。
        • 这几个特性对于任何三角形的任何边,都适用。
        • 那么怎么理解呢?

        (1)两边之和大于第三边

        • 这个其实还是很好理解的,如果等于的三边的话,整个三角形就会变成一根棍子。三条边紧贴在一起。

        (2)两边之差小于第三边

        • 这也很好理解,假设有两根棍子,一根长10,一根长6,如果第三边为4,是两边之差的话,那么4+6=10,违反了上一个特性,自然就错了。

        懂了这些之后,题目就简单了。

        思路:

        1. 算出两边之和。
        2. 算出两边之差。
        3. 用差减和,再减上1,这就是符合特性的所有整数。如和为10,差为2,那符合的就是3、4、5、6、7、8、9,一共10-2+1个数。

        AC代码(求赞)

        #include <bits/stdc++.h>
        using namespace std;
        int main()
        {
            int a,b;
            cin>>a>>b;
            cout<<(a+b)-abs(a-b)-1;/*用和减去差,再减1。
              abs()求括号里的数的绝对值的意思,
              自然数的绝对值是他本身,负数就是他去掉负号。因为如果b>a那么a-b会是负数。
            */
            return 0;
        }
        
        • 4
          @ 2023-8-9 12:44:40
          #include <bits/stdc++.h>
          using namespace std;
          int main()
          {
              int a,b,n;
              cin >> a >> b;
              if(a>b)//两边之差的判断条件
              {
                  n=a-b;
              }
              else
              {
                  n=b-a;
              }
              cout << a+b-n-1;//算出结果(一个取值范围内的数)
              return 0;
          }
          
          • 3
            @ 2023-8-28 6:25:17
            #include <bits/stdc++.h>//万能开头
            using namespace std;
            int a,b,n;//定义变量(n是第三边)
            int main()
            {
                cin >> a >> b;//输入a,b
                if(a>b)//两边之差的判断条件
                {
                    n=a-b;
                }
                else
                {
                    n=b-a;
                }
                cout << a+b-n-1;//算出结果
                return 0;
            }
            
            //一手交赞,一手交货(代码)
            
            
            
            
            
            
            //核桃hetao1609095编程
            //水印
            
            • 3
              @ 2023-8-13 14:00:37

              #include <iostream> using namespace std; int main() { int a,b,num=0; cin>>a>>b; for(int i=1;i<a+b;i++) { num++; } return 0; }

              
              

              已AC请放心食用 注意 低内存容易超时

              • @ 2024-5-28 20:06:38

                我也承诺此代码有101%的bug,可999年WA通过 列表: #1:Wrong Answer -1分 TEL:3141592653589793Hour 1024TB System Wornning: C:\ 99.98GB/99.98GB D:\1023.982GB/1023.982GB Today Is 2097年13月32 下面省略。。。

            • 3
              @ 2022-9-30 20:30:37
              #include <iostream>
              using namespace std;
              int main()
              {
                  int a,b,c;
                  cin>>a>>b;
                  if (a<b)//如果a小于b,那就把他们交换
                  {
                      c=a;
                      a=b;
                      b=c;
                  }
                  cout<<(a+b)-(a-b)-1;//这里可以用公式,但需要先检测a是不是小于b,否则a-b会是负数
              }
              
              • 2
                @ 2023-8-16 18:07:21

                话不多说,上代码吧......

                #include <bits/stdc++.h>
                using namespace std;
                int main()
                {
                    int a,b,n;
                    cin>>a>>b;//输入a,b
                    if(a>b)
                    {
                        n=a-b;
                    }
                    else
                    {
                        n=b-a;
                    }
                    cout<<a+b-n-1;//输出答案
                    return 0;
                }
                
                

                制作不易,给个赞吧,球球了...... 有什么问题,联系我,邮箱是ASheepBoy_Bed@163.com

                • 2
                  @ 2023-8-7 13:37:35

                  用数学方法来分析简化

                  首先要知道满足围成三角形的三边关系:

                  任意两边之和大于第三边 任意两边之差小于第三边

                  那么已知两边,求第三边有几种结果,便可得出下列式子:


                  设三边分别为a,b,c,(已知a,b)

                  a+b>c>a-b>=0

                  稍微变下形

                  因为要求a-b>0,而a,b大小关系不定,所以产生绝对值(分类讨论)

                  变成下列式子

                  (a+b)-|a-b|>c>0

                  继续化简

                  ① 当a>=b时:

                  2b>c>0

                  因为b,c为整数

                  所以c有2b-1种值

                  ②当a<b时:

                  2a>c>0

                  因为a,c为整数

                  所以c有2a-1种值


                  *(tips:a-b=0,也就是a=b属于特殊情况,①②中均可,在此将其归类于①中)


                  到此,我们边分析出了三角形任意两边长度与第三边取值个数的关系,下面上代码

                  #include <iostream>
                  using namespace std;
                  
                  int main()
                  {
                  	int a, b;
                  	cin >> a >> b;
                  	if (a >= b) //判断a,b大小
                      {
                  	    cout << 2 * b - 1;
                      } 
                      else 
                      {
                  		cout << 2 * a - 1;
                  	} //直接套用公式
                  	return 0;
                  }
                  

                  (tips:如果你知道abs也可以不使用if来判断正负,在此不赘述)

                  第一次写题解,如有错误欢迎指正

                  • 1
                    @ 2024-1-24 21:38:24
                    #include <bits/stdc++.h> 
                    using namespace std;
                    int x,y;
                    int main()
                    {
                        cin>>x>>y;
                        cout<<x+y-abs(x-y)-1;//此处用公式:两条边的和-这两条边的差=第三条边有多少种可能性
                        return 0;
                    }
                    

                    image

                    • 1
                      @ 2023-12-30 21:19:57
                      #include <iostream>
                      using namespace std;
                      int main()
                      {
                          int a,b,MIN,MAX,n;
                          cin>>a>>b;
                          if(a>b)
                          {
                              MIN=a-b;
                          }
                          else
                          {
                              MIN=b-a;
                          }
                          MAX=a+b;
                          n=(MAX-1)-(MIN+1)+1;
                          cout>>n;
                          return 0;
                      }
                      
                      • 1
                        @ 2023-11-23 21:05:07
                        #include <bits/stdc++.h>
                        using namespace std;
                        int main()
                        {
                            int a,b,sum=0;
                            cin >> a >> b;
                            if (a > b)
                            {
                                sum = a - b;
                            }
                                
                            else
                            {
                                sum = b - a;
                            }
                                
                            cout << (a + b) - sum - 1; 
                            return 0;
                        }
                        
                        • 1
                          @ 2023-8-2 19:52:09
                          #include <bits/stdc++.h>
                              using namespace std;
                              int main()
                              {
                                  int a,b,n;
                                  cin >> a >> b;
                                  if(a>b)//两边之差的判断条件
                                  {
                                      n=a-b;
                                  }
                                  else
                                  {
                                      n=b-a;
                                  }
                                  cout << a+b-n-1;//算出结果(一个取值范围内的数)
                                  return 0;
                              }
                          
                          • 1
                            @ 2023-7-31 12:25:59
                            #include <iostream>
                            using namespace std;
                            int main()
                            {
                                int a,b,c,x,y;
                                cin >> a >> b;
                                if (a > b)
                                {
                                    x = a - b + 1;
                                }
                                else
                                {
                                    x = b - a + 1;
                                }
                                y = a + b - 1;
                                cout << y - x + 1;
                                return 0;
                            }
                            
                            • 1
                              @ 2023-3-28 21:33:15

                              (这应该是最简的了吧)

                              #include<bits/stdc++.h>
                              using namespace std;
                              int main()
                              {
                                  int a,b;
                                  cin>>a>>b;
                                  cout<<a+b-1-(abs(a-b));
                                  return 0;
                              }
                              
                              • @ 2024-5-28 20:06:49

                                我也承诺此代码有101%的bug,可999年WA通过 列表: #1:Wrong Answer -1分 TEL:3141592653589793Hour 1024TB System Wornning: C:\ 99.98GB/99.98GB D:\1023.982GB/1023.982GB Today Is 2097年13月32 下面省略。。。

                            • 1
                              @ 2023-2-25 15:41:25
                              #include <iostream>
                              using namespace std;
                              int main()
                              {
                                  int aa,a,b;
                                  cin >> a >> b;
                                  if (a > b)
                                  {
                                  	aa = a - b;
                              	}
                              	else
                              	{
                              		aa = b - a;//aa为两边之差
                              	}
                                  cout<<a+b-aa-1;//运用两边之和大于第三边,两边之差小于的三边
                                  return 0;
                              }
                              

                              信息

                              ID
                              522
                              时间
                              1000ms
                              内存
                              128MiB
                              难度
                              7
                              标签
                              递交数
                              18999
                              已通过
                              3895
                              上传者