#include "stdio.h"
int getfirstfactor(int maxz,int n,int *num,int bg)
{
int m,s;
m=n-maxz;
if(maxz==n)
{
num[bg]=maxz;
return 1;
}
if(m <=maxz)
{
num[bg]=maxz;
num[bg+1]=m;
return bg+2;//首个因子分解为bg+2个
}
else
{
s=m;
num[bg]=maxz;
getfirstfactor(maxz,s,num,bg+1);
}
}
void factorthemaxfactor(int *num,int element,int *cnum,int dsk_num )
{
int i,j;
if(element <=dsk_num)
{
for(i=0;i <element;i++)printf("%d ",num[i]);printf("\n");
*cnum+=1;
}
if(element==1)return ;
if(num[0]==1)return ;
if(num[1]==1)return ;
for(j=element-1;j>0;j--)
{
if(num[j]!=1)
{
for(i=j+2;i <=element;i++)
num[i]=num[i-1];
num[j]=num[j]-1;
num[j+1]=1;
factorthemaxfactor(num,element+1,cnum,dsk_num);
}
}
}
void main()
{
int num[1000]={0};
int m,element,n,count=0,cnum=0,dsk_num=4;
n=6;
for(m=n;m>=1;m--)
{
element=getfirstfactor(m,n,num,0);
factorthemaxfactor(num,element,&cnum,dsk_num);
}
printf("一共%d组!\n",cnum);
}
帮忙详细注释下这个程序哦 悬赏仅有的分数 跪谢
答案:1 悬赏:50 手机版
解决时间 2021-05-08 09:22
- 提问者网友:捧腹剧
- 2021-05-07 09:11
最佳答案
- 五星知识达人网友:duile
- 2021-05-07 10:48
#include "stdafx.h"
#include<iostream>
using namespace std;
int dp[11][11]; //定义二维数组
void DP()
{
int i,j,k;
for(i=1;i<=10;i++)
dp[i][i]=dp[i][1]=1;
for(i=3;i<=10;i++)
{
for(j=2;j<i&&j<=10;j++)
{
for(k=1;k<=i-j&&k<=j;k++)
dp[i][j]+=dp[i-j][k];
}
}
}
//输出指定行的和,输出次数由输入的N决定
int _tmain(int argc, _TCHAR* argv[])
{
int m,n; int N;
DP();
cin>>N;
while(N--)
{
cin>>m>>n;
int i;
int ans=0;
for(i=1;i<=n;i++)
ans+=dp[m][i];
cout<<ans<<endl;
}
return 0;
}
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯