问8 一道有深度的的题。。。。
2024-04-28 21:54:01
发布于:广东
【问题8】分解数
题目描述
从键盘输入一个正整数N,求把它分解成若干个小于等于N的正整数之和的所有情况。
输入
输入一个正整数n
输出
一行,第一个整数表示第几种情况,空一格,第二个数表示正整数n,加一个=号,接下来用'整数+'的方式列出分解出的数
样例输入
2
样例输出
1 2=1+1
2 2=2
my code:
#include<bits/stdc++.h>
using namespace std;
int a[10001]={1},n,xh;
int sc(int t)//
{
xh++;
cout<<xh<<" "<<n<<"=";
for (int i=1;i<t;i++)
{
cout<<a[i]<<"+";
}
cout<<a[t]<<endl;
}
int hs(int s,int t)
{
for (int i=a[t-1];i<=s;i++)
{
if(i<n)
{
a[t]=i;
s-=i;
if (s==0)
{
sc(t);
}
else
{
hs(s,t+1);
}
s+=i;
}
}
}
int main()
{
cin>>n;
hs(n,1);//剩余数的和,搜索深度
xh++;
cout<<xh<<" "<<n<<"="<<n;//特殊情况:递归到最后n=n `
}
错误样例:
4
应输出:
1 4=1+1+1+1
2 4=1+1+2
3 4=1+2+1
4 4=1+3
5 4=2+1+1
6 4=2+2
7 4=3+1
8 4=4
一道有深度的题当思来之不易,接下来有请各位大展身手😊
全部评论 1
把for (int i=a[t-1];i<=s;i++)改为for (int i=1;i<=s;i++)。
2024-04-29 来自
0有一说一,你下次发帖的时候最好调整一下代码的缩进和格式。不然别人看起来会很头疼
2024-04-29 来自
2ok
2024-05-01 来自 广东
0但是为什么呢?
因为这些数不用按大小排序吗?2024-05-01 来自 广东
0
有帮助,赞一个