📄 分解数.txt
字号:
编程序求某一数的所有分解数,如输入7,则输出:(要求输出不能重复)
7=6+1 7=4+1+1+1 7=2+3+2
7=5+2 7=3+3+1 7=2+2+2+1
7=5+1+1 7=3+2+2 7=2+2+1+1+1
7=4+3 7=3+2+1+1 7=2+1+1+1+1+1
7=4+2+1 7=3+1+1+1+1 7=1+1+1+1+1+1+1
答案:
int sum,j,k;
long all=0;
fun1(int a[],int ii,int n)
{int i,jj,sumsum;
jj=j;
sumsum=sum;
for(i=ii;i<n;i++)
{sum=sumsum;j=jj;/*每一次递归的时候都要将j和sum的值按找传递过来的值初始化*/
if(sum+i>n)/*如果加上一个数后大于输入的数了就跳出循环*/
break;
else if(sum+i==n)/*如果通过递归几次加起来的数都相同就把数组输出*/
{
all++;
a[++j]=i;
for(k=0;k<=j;k++)
printf("%3d",a[k]);
printf("\n");
break;
}
a[++j]=i;/*其他情况就把数保存到数组中,继续递归*/
sum+=i;
fun1(a,i,n);
}
}
fun(int n)
{int i,a[100]={0};
for(i=1;i<=n/2;i++)/*第一个数的范围是这样大小的*/
{
j=0;/*用j变量来记录下小标,然后把符合条件的数组最后输出来*/
sum=0;
a[j]=i;
sum+=i;/*sum变量是用来统计几个数加起来的和是否等于输入的数*/
fun1(a,i,n);
}
printf("there are %ld way.\n",all);
}
main()
{int n;
clrscr();
printf("input a num: ");
scanf("%d",&n);
fun(n);
getch();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -