9 条题解

  • 36
    @ 2022-10-6 15:08:30

    留个赞再走

    #include <bits/stdc++.h>
    using namespace std;
    int main()
    {
        int n;
        cin>>n;
        for(int i=1;i<=n-2;i++)     //n-2是为了保障后面的最少有两个不含0的数。
        {
            for(int j=i;j<=n-1;j++)    //j直接从前一个数开始,避免重复。
            {
                for(int k=j;k<=n;k++)
                {
                    if((i+j+k)==n)
                    {
                        cout<<n<<'='<<i<<'+'<<j<<'+'<<k<<endl;      //注意输出格式要求。
                    }
                }
            }
        }
        return 0;
    }
    
    • @ 2023-1-14 14:01:46

      可以定义函数写函数里,然后直接输出函数,自我感觉更明了。

    • @ 2023-1-14 14:03:06

      这样内存占用更小。

    • @ 2023-4-28 19:33:56

      。。。。。。

  • 19
    @ 2022-12-25 9:39:04

    最简题解

    #include <iostream>
    using namespace std;
    int main()
    {
        int n;
        cin >> n;
        for (int i = 1; i <= n / 3; i++)
        	for (int j = i; j <= (n - i) / 2; j++)
        		cout << n << "=" << i << "+" << j << "+" << (n - i - j) << endl;  
        return 0;
    }
    

    点个👍 呗

    • 9
      @ 2023-8-17 1:56:18

      这题是典型的深度优先搜索

      深度优先搜索如果不知道没关系,走迷宫玩过吧,
      深搜就像沿着一条路一直走,碰到死路就返回,最
      后找到终点。
      
      这题的思路是:
      定义一个函数void dfs(int k)来深搜,k表示将n拆成3个数的其中哪一个数,可以理解成拆到的第几位数。
      然后的一个if判断是否搜索完3位,并且总和为n,是就输出结果,不是就继续搜索。
      接着循环用来相加的数(算符),照题目的要求,后面的数>=前面的数且不为0,
      从1开始判断,如果>=前面的数就将此数存到数组中,接着dfs(k+1)搜索下一位。
      dfs函数就完事了,由于要从第一位开始搜索,主函数中dfs(1),然后就无啦。
      

      代码(已AC):

      #include<iostream>
      using namespace std;
      int n,ans[10]={0};
      void dfs(int k){
      	int sum=ans[1]+ans[2]+ans[3];
      	if(k>3){
      		if(sum==n){
      			cout<<n<<"=";
      			cout<<ans[1]<<"+"<<ans[2]<<"+"<<ans[3]<<endl;
      			return;
      		}
      		else return;
      	}
      	for(int i=1;i<=n;i++){
      		if(i>=ans[k-1]){
      			ans[k]=i;
      			dfs(k+1);
      		}
      	}
      }
      int main(){
      	cin>>n;
      	dfs(1);
      	return 0;
      }
      

      最后,给听不懂的同学送来其它方法,暴力の枚举法:

      #include<iostream>
      using namespace std;
      int n;
      int main(){
      	cin>>n;
      	for(int i=1;i<=n;i++){
      		for(int j=1;j<=n;j++){
      			for(int k=1;k<=n;k++){
      				if(i+j+k==n&&i<=j&&j<=k)
      					cout<<i<<"+"<<j<<"+"<<k<<"="<<n<<endl;
      			}
      		}
      	}
      	return 0;
      }
      

      听不懂是正常的,初学算法肯定会有点懵,但是不排除是我个人没讲好,有错误或讲解不到位望大佬指出,感谢看完我的题解。 看完求留下一个赞

      • 2
        @ 2023-8-28 11:41:56

        不是最简题解! 这才是!

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

        点个👍再带代码走

        • -2
          @ 2022-12-31 20:33:09
          #include <iostream>
          using namespace std;
          int main()
          {
              int n;
              cin >> n;
              for (int i = 1; i <= n / 3; i++)
              {
                  for (int j = i; j <= (n - i) / 2; j++)
                  {
                      cout << n << "=" << i << "+" << j << "+" << (n - i - j) << endl;  
                  }
              		
              }
              	
              return 0;
          }
          
          • -2
            @ 2022-8-20 14:26:05
            for (int i=1;i<=n/3;i++)//枚举第一个数
            {
                for (int j=i;j<=(n-i)/2;j++)//枚举第二个数
                {
                    printf("%d=%d+%d+%d\n",n,i,j,n-i-j);//由于三个数的和必定为10,无需再枚举第三个数
                }
            }
            
            • -2
              @ 2022-8-12 14:06:34

              题目要求:将n拆解成三个数之和,不能有重复,三个数不含0。


              数据范围比较小,可以直接用嵌套循环来实现,代码如下:

              for(int i=1;i<=n-2<<i++)     //n-2是为了保障后面的最少有两个不含0的数。
              {
                  for(int j=i;j<=n-1;;j++)    //j直接从前一个数开始,避免重复。
                  {
                      for(int k=j;k<=n;k++)
                      {
                          if((i+j+k)==n)
                          {
                              cout<<n<<'='<<i<<'+'<<j<<'+'<<k<<endl;      //注意输出格式要求。
                          }
                      }
                  }
              }
              
              • -7
                @ 2022-4-24 16:03:48

                鼓励大家写题解,但注意题解格式。

                给代码两端加上这个会舒服一些

                ```cpp

                你的代码

                ```

                </span>

                这个点在键盘的左上角tab上面那个键,注意切换输入法

                #include<iostream>
                using namespace std;
                int main()
                {
                    int n;
                    cin>>n;//这是一个注释
                    return 0;
                } 
                

                请注意严禁抄袭题解,写题解不要只放代码,需加上你的思路或代码注释。

                抄袭题解一经发现直接取消成绩。

              • -15
                @ 2023-4-9 17:01:37
                **using** **namespace** **std**;
                **int** **main**()
                {
                **    **int** **a**;**
                **    **cin**>>**a**;**
                **    **for**(**int** **i**=**1**;**i**<**a**;**i**+=**1**)**
                **    **{
                **        **for**(**int** **j**=**i**;**j**<=**a**;**j**+=**1**)**
                **        **{
                **            **if**(**a**-(**i**+**j**)>=**i** **and** **a**-(**i**+**j**)>=**j**)**
                **                **cout**<<**a**<<**"="**<<**i**<<**"+"**<<**j**<<**"+"**<<**a**-(**i**+**j**)<<**"**\\n**"**;**
                **            **else
                **                **continue**;**
                **        **}
                **    **}
                **    **return** **0**;**
                }
                
                
                
                • @ 2024-5-4 14:10:39

                  牛皮,星号之王,必须给个大大的 👎

                • @ 2024-5-11 21:13:18

                  你****为什么要打这么多星号***************************************************************************************************************************************

                • @ 2024-5-11 21:18:09

                  牛B

                  从来没遇到过

                  这么多

                  星号
                  的代码
              • 1

              【入门】将n拆成3个数的和

              信息

              ID
              513
              时间
              1000ms
              内存
              128MiB
              难度
              3
              标签
              递交数
              1002
              已通过
              506
              上传者