14 条题解

  • 25
    @ 2023-7-26 0:07:25

    -题目回顾-

    输入一根木棒的长度n,将该木棒分成三段,每段的长度为正整数,输出由该三段小木棒组成的不一样的三角形个数。

    -分析-

    这不需要分析,直接枚举a和b,把c算出来,最后检验是否符合三角形成立条件即可


    代码如下:

    #include <bits/stdc++.h>
    using namespace std;
    int c, ans;
    int main()//by AGOMG
    {
        int n;
        cin >> n;
        for(int a = 1; a <= n - 2; a++)
        {
            for(int b = a; b <= n - 2; b++)
            {
                c = n - a - b;
                if(a + b > c && c >= a && c >= b)
                {
                    ans++;
                }
            }
        }
        cout << ans;
        return 0;
    }
    
    
    
    • 9
      @ 2023-3-19 21:32:25

      P1008 三角形个数

      题目描述

      输入一根木棒的长度n,将该木棒分成三段,每段的长度为正整数,输出由该三段小木棒组成的不一样的三角形个数。


      思路

      挨个枚举呗,把符合的累加一下。

      for(int i = 1;i <= n - 2;i++)
          {
              for(int j = i;j <= n - 2;j++)
              {
                  l = n - i - j;
                  if(i + j > l && l >= i && l >= j)
                  {
                      sum++;
                  }
              }
          }
      

      不过其实循环没啥技术含量,还是主要判断条件

      l = n - i - j;
      if(i + j > l && l >= i && l >= j)
      {
           sum++;
      }
      

      两边之和大于第三边:

      i + j > l

      实现不同的:

      l >= i && l >= j

      连起来,成了。


      参考代码

      #include <iostream>//hetao3097453
      using namespace std;
      int l,sum;
      int main()
      {
          int n;
          cin >> n;
          for(int i = 1;i <= n - 2;i++)
          {
              for(int j = i;j <= n - 2;j++)
              {
                  l = n - i - j;
                  if(i + j > l && l >= i && l >= j)
                  {
                      sum++;
                  }
              }
          }
          cout << sum;
          return 0;
      }
      
      

      hetao3097453(bililili @ 一钩出站)

      2023年3月19日


    • 6
      @ 2023-3-19 21:15:22
      #include<bits/stdc++.h>
      using namespace std;
      int n,k,sum=0;
      int main() 
      {
          cin>>n;
          for(int i=1; i<=n-2; i++)
          {
              for(int j=i; j<=n-2;j++)      
              {
                  k=n-i-j;                                          
                  if(k>=j&&j>=i&&i+j>k)
                  {                  
                      sum++;
                  }
              }
          }  
          cout<<sum;
          return 0;
      }
      
      • @ 2023-12-24 21:14:01

        为啥是n-2

      • @ 2024-1-6 22:32:30

        @ 因为是三根,所以还要留下另外两根啊。另外两根也需要枚举,它们最少是1,所以是n-2

      • @ 2024-4-27 16:09:36

        @ 👍 👍 👍

    • 5
      @ 2023-10-20 20:13:59

      C2每课一题解(第三课 第二题)!!!

      此题简单,只需用这节课的知识——循环枚举。

      话不多说,上代码!

      AC Code

      #include<bits/stdc++.h>
      using namespace std;
      int main()
      {
          int l,sum = 0;
          int n;
          cin >> n;
          for( int i=1;i < n-1;i++ )
          {
              for( int j=i;j <n-1;j++ )
              {
                  l = n - i - j;
                  if(i+j>l && l>=i && l>=j)
                  {
                      sum++;
                  }
              }
          }
          cout << sum;
          return 0;
      }
      
      • 3
        @ 2023-5-28 17:40:00

        该问题需要计算由给定木棒长度组成的不同三角形个数。下面是解题的思路:

        1. 定义一个函数countTriangles,该函数接收一个参数n,表示木棒的长度。函数返回值为整数,表示由该木棒组成的不同三角形个数。
        2. countTriangles函数内部,定义一个变量count,用于记录满足条件的三角形个数,初始值为0。
        3. 使用两层循环遍历所有可能的木棒长度组合。
        4. 外层循环从1遍历到n-2,表示第一段木棒的长度。
        5. 内层循环从外层循环变量开始遍历到n-2,表示第二段木棒的长度。
        6. 计算第三段木棒的长度c,即剩余长度n减去前两段木棒的长度。
        7. 判断是否满足构成三角形的条件:a + b > cc >= ac >= b
        8. 如果满足条件,则将count加1,表示找到一个符合条件的三角形。
        9. 循环结束后,返回count作为结果。
        10. 在主函数中,读取输入的木棒长度,并调用countTriangles函数计算结果。
        11. 输出结果。

        该解题过程通过两层循环遍历所有可能的木棒长度组合,然后判断是否满足三角形的条件。通过计数器记录符合条件的三角形个数,最后返回结果。


        上代码

        #include <iostream>
        using namespace std;
        
        int countConsecutiveRanges(int n) {
            int sum = 0;
            for (int i = 1; i <= n - 2; i++) {
                for (int j = i; j <= n - 2; j++) {
                    int l = n - i - j;
                    if (i + j > l && l >= i && l >= j) {
                        sum++;
                    }
                }
            }
            return sum;
        }
        
        int main() {
            int n;
            cin >> n;
            int result = countConsecutiveRanges(n);
            cout << result << endl;
            return 0;
        }
        
        
      • 2
        @ 2024-1-6 17:18:47
        #include <iostream>
        using namespace std;
        int countConsecutiveRanges(int n) {
            int sum = 0;
            for (int i = 1; i <= n - 2; i++) {
                for (int j = i; j <= n - 2; j++) {
                    int l = n - i - j;
                    if (i + j > l && l >= i && l >= j) {
                        sum++;
                    }
                }
            }
            return sum;
        }
        int main() {
            int n;
            cin >> n;
            int result = countConsecutiveRanges(n);
            cout << result << endl;
            return 0;
        }
        
        • 2
          @ 2023-8-5 19:54:25

          我认为是这个范围

          #include <bits/stdc++.h>
          using namespace std;
          int main()
          {
              int n,sum = 0;
              cin >> n;
              for (int a = 1;a <= n / 3;a++)
              {
                  for (int b = a;b <= n / 3 * 2;b++)
                  {
                      int c = n - a - b;
                      if (a + b > c && c >= a && c >= b)
                      {
                          sum++;
                      }
                  }
              }
              cout << sum;
              return 0;
          }
          
          • @ 2024-1-27 18:58:43

            这个可以,少了小半的时间复杂度😕 👍

        • 2
          @ 2023-8-5 19:44:49

          题解

          #include <bits/stdc++.h>
          using namespace std;
          int main()
          {
              int l , sum = 0;
              int n;
              cin >> n;
              for( int i = 1 ; i < n - 1 ; i++ )
              {
                  for( int j = i ; j < n - 1 ; j++ )
                  {
                      l = n - i - j;
                      if( i + j > l and l >= i and l >= j)
                      {
                          sum++;
                      }
                  }
              }
              cout << sum;
              return 0;
          }
          
          • 2
            @ 2023-3-17 13:42:10
            题目大意
                    三根木棍总长度为n,每段的长度都为整数,求最多能组成几个不同的三角形。

            完整思路
                    枚举三角形的两条较短的边i, j,令j>=i,这样第三条边k就为n - i - j。枚举所有的i, j,寻找所有满足条件的边长。

                    条件:两边之和大于第三边,k>=j,j>=i。

            核心代码
            
            for (int i = 1; i <= n - 2; i++)
            {
                for (int j = i; j <= n - 2; j++)
                {
                    int k = n - i - j;
                    if (i + j > k && k >= i && k >= j)
                        ans++;
                }
            }
            
            
            • 1
              @ 2024-3-28 20:58:34
              #include
              using namespace std;
              int c, ans;
              int main()
              {
                  int n;
                  cin >> n;
                  for(int a = 1; a <= n - 2; a++)
                  {
                      for(int b = a; b <= n - 2; b++)
                      {
                          c = n - a - b;
                          if(a + b > c && c >= a && c >= b)
                          {
                              ans++;
                          }
                      }
                  }
                  cout << ans;
                  return 0;
              }
              
              • 1
                @ 2024-3-9 22:13:16

                -题目描述-

                题目描述

                输入一根木棒的长度n,将该木棒分成三段,每段的长度为正整数,输出由该三段小木棒组成的不一样的三角形个数


                代码部分

                1.伪代码

                不看代码派专用只看思路的,请~~

                定义长度l,计数num 
                输入l
                枚举a(短直角边)的所有可能(1~l-2)
                枚举b(长直角边)的所有可能(a~l-2)
                c(斜边)=l-a-b
                if(任意两边之和大于第三边&&c>=a&&c>=b)
                num++;
                输出num
                

                2.代码

                #include <bits/stdc++.h>
                using namespace std;
                int l,num;
                int main()
                {
                	cin>>l;
                	for(int a=1;a<=l-2;a++)
                	{
                		for(int b=a;b<=l-2;b++)
                		{
                			int c=l-a-b;
                			if((a+b>c)&&(a+c>b)&&(b+c>a)&&(c>=b&&c>=a))
                			{
                				//cout<<a<<" "<<b<<" "<<c<<endl; 调试 
                			    num++;
                			}
                		}
                	}
                	cout<<num;
                	return 0;
                 }
                
                • 1
                  @ 2023-3-17 20:37:08

                  一个能帮到的题解~

                  #include<bits/stdc++.h>
                  using namespace std;
                  int n,ans,j;
                  int main() 
                  {
                  cin>>n;
                  for(int i=1; i<=n-2; i++)
                  for(int k=i; k<=n-2; k++)                 //n-2避免出现有条边为0 
                  {
                  j=n-i-k;                                          
                  if(j>=k&&j>=i&&i+k>j)                  
                  ans++;
                  } 
                  cout<<ans;
                  return 0;
                  }
                  
                  • 0
                    @ 2024-5-26 16:02:35

                    -题目回顾-

                    输入一根木棒的长度n,将该木棒分成三段,每段的长度为正整数,输出由该三段小木棒组成的不一样的三角形个数。

                    由于三角形任意连边之和大于第三边,所以:

                    if(i+j>c&&c>=i&&c>=j)
                        {
                            ans++;
                         }
                    

                    不废话了,上代码!

                    #include <bits/stdc++.h>
                    using namespace std;
                    int c, ans;
                    int main()
                    {
                        int n;
                        cin >> n;
                        for(int i=1;i<=n-2;i++)
                        {
                            for(int j=i;j<=n-2;j++)
                            {
                                c = n - i - j;
                                if(i+j>c&&c>=i&&c>=j)
                                {
                                    ans++;
                                }
                            }
                        }
                        cout << ans;
                        return 0;
                    }
                    

                    求赞…………

                    • -1
                      @ 2023-12-24 21:13:14

                      为什么 i是1到n-2; j是i到n-2 当·n=6是; i=4时那j就等于5,6; 吗有大神可以讲一下吗

                      • @ 2024-1-27 18:49:00

                        因为要避免另外两条边是零(三角形三边不为零) 由于题目中说三边为正整数,所以另两条边最小都是1,这样i的范围只能是n-1-1也就是n-2 j也同理

                      • @ 2024-1-27 18:57:01
                        同时你说的这种情况不存在:

                        i为4时 j的范围为i--n-2也就是4到4,所以j只能取4,那么l就等于-2,此时不构成三角形

                    • 1

                    信息

                    ID
                    12
                    时间
                    1000ms
                    内存
                    256MiB
                    难度
                    5
                    标签
                    递交数
                    3873
                    已通过
                    1590
                    上传者