目录
题目
题目描述
从键盘输入一个正整数N,求把它分解成若干个小于等于N的正整数之和的所有情况。
输入
输入一个正整数n
输出
一行,第一个整数表示第几种情况,空一格,第二个数表示正整数n,
加一个=号,接下来用'整数+'的方式列出分解出的数
样例输入输出#
输入
2
输出
1 2=1+1
2 2=2
思路
请注意这里:
看一下这里的输入输出,是从1开始分的,所以我们可以采用dfs来做这道题,从而AC
还有,看这里:
前面还有一个计数,所以我们还要一个变量来计数
咳咳,主要的还是dfs结构:
void dfs(int k){
if(达到目的){
cnt++;
输出;
}else{
for(遍历所有的算符){
if(达到条件){
标记1;
dfs(k+1);
标记0;
}
}
}
}
思路只是假想,重要在于实现
#include<iostream>
using namespace std;
int t=0,a[25],b;
void hello(int n,int k){
int i;
if(n==0){
cout<<++t<<" "<<b<<"=";
for(i=1;i<=k-2;i++)cout<<a[i]<<"+";
cout<<a[k-1]<<endl;
}
else{
for(int j=1;j<=n;j++){
a[k]=j;
hello(n-j,k+1);
}
}
}
int main(){
cin>>b;
hello(b,1);
return 0;
}