我用这个代码(如图所示),全WA了
#include<iostream>
#include<iomanip>
using namespace std;
int a[10010]={1},n;
int print(int t){
cout<<n<<"=";
for(int i=1;i<=t-1;i++){
cout<<a[i]<<"+";
}
cout<<a[t]<<endl;
}
int dfs(int s,int t){
int i;
for(i=a[t-1];i<=s;i++){
if(i<n){
a[t]=i;
s-=i;
if(s==0)print(t);
else dfs(s,t+1);
s+=i;
}
}
}
int main(){
cin>>n;
dfs(n,1);
return 0;
}
然后我用网上的代码(如图所示),A了,上面的代码样例也能过,为什么WA了?
#include <stdio.h>
#define N 10010
int a[N]={1};
int n;
int total=1;
void print(int t)
{
int i;
printf("%d=",n);
for(i=1;i<=t-1;i++)
printf("%d+",a[i]);
printf("%d\n",a[t]);
// total++;
}
void dfs(int s,int t)
{
int i;
for(i=a[t-1];i<=s;i++)
{
if(i<n)
{
a[t]=i;
s-=i;
if(s==0)
print(t);
else
dfs(s,t+1);
s+=i;
}
}
}
int main()
{
scanf("%d",&n);
dfs(n,1);
//printf("%d\n",total);
return 0;
}