一直在re wa

题目总版

一个很简单的回溯,可以看看 @[SuperNova3333](/user/1156118)
by _____QWQ_____ @ 2024-04-12 17:07:28


ac code: ```cpp #include <iostream> using namespace std; int n; int out[110]; void dfs(int step,int num,int num1) { if(num>n) return ; if(num==n&&step>=1) { cout<<out[1]; for(int i=2;i<=step;i++) { cout<<"+"<<out[i]; } cout<<endl; return ; } for(int i=num1;i<n;i++) { out[step+1]=i; dfs(step+1,num+i,i); } } int main() { cin>>n; dfs(0,0,1); return 0; } ```
by _____QWQ_____ @ 2024-04-12 17:09:54


好像不需要这么麻烦吧,看不懂可以私信 @[SuperNova3333](/user/1156118)
by _____QWQ_____ @ 2024-04-12 17:11:55


谢谢QWQ
by SuperNova3333 @ 2024-04-12 17:19:16


@[SuperNova3333](/user/1156118) ```c #include<cstdio> #include<iostream> #include<cstdlib> using namespace std; int a[10001]={1},n; int search(int,int); int print(int); int main() { cin>>n; search(n,1);//将要拆分的数n传递给s return 0; } int search(int s,int t) { int i; for(i=a[t-1];i<=s;i++) if(i<n)//当前数i要大于等于前一位数,且不超过n { a[t]=i;//保存当前拆分的数i s-=i;//s减去数i,s的值将继续拆分 if(s==0)print(t);//当s=0时,拆分结束输出结果 else search(s,t+1);//当s>0时,继续递归 s+=i;//回溯:加上拆分的数,以便产生所有可能的拆分 } } int print(int t) { for(int i=1;i<=t-1;i++)//输出一种拆分方案 cout<<a[i]<<"+"; cout<<a[t]<<endl; } ```
by MANGO__FRIUT @ 2024-04-12 17:31:18


|