思路:
直接暴力搜索 dfs直接可过
代码编写:
#include<stdio.h>
int a[40]={0};//用来当作一个基数 里面a[0-39]存放[1-40]这些数
int log[100]={0};//用来记录当前路径(由哪几位数组成)
int sign=0;//用来控制换行符和分号的输出
int n;
//深度优先搜索暴力解答即可
void dfs(int now,int count,int value){
//判断是否已满足搜索终点
if(now==n){
//如果是第一次进行输出(sign=0), 那么不输出 ;
//如果 输出数量够四个了 那么下一次输出在下一行行初(第五次输出) 也不需要输出 ;
if(sign!=0&&((sign)%4)!=0)
printf(";");
//输出本条路径
printf("%d=%d",n,log[0]);
for(int i=1;i<count;i++)
printf("+%d",log[i]);
//输出完之后输出次数加 1
sign++;
//判断是否需要输出换行符
if(sign%4==0)
printf("\n");
return ;
}
for(int i=value;;++i){
if((now+a[i])<=n){
log[count]=a[i];
dfs(now+a[i],count+1,i);
log[count]=0;
}
else
break;
}
return ;
}
int main(){
scanf("%d",&n);
//给a[]赋初始值
for(int i=0;i<40;i++)
a[i]=i+1;
dfs(0,0,0);
return 0;
}
初级小白(在校生)整理以用作学习,若有错误,还望指正,共勉!
初次书写,若存在侵权或其他问题,定立即改正,还望海涵。