关于一本通上的 1318:自然数的拆分
  • 板块学术版
  • 楼主AnOIer
  • 当前回复2
  • 已保存回复2
  • 发布时间2023/8/30 14:19
  • 上次更新2023/11/3 00:21:29
查看原帖
关于一本通上的 1318:自然数的拆分
1036897
AnOIer楼主2023/8/30 14:19

我用这个代码(如图所示),全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;
}
2023/8/30 14:19
加载中...