C语言新手,将整数拆分成几个整数和的形式和几个奇数和的形式。
大一新生小白,注释是我让自己理解的部分,可以不理会。代码如下:
/*整数的拆分*/
#include<stdio.h>
unsigned int flag1,flag2;
void func1(int n)
{
int i,j;
if(n==1)/*递归结束条件*/
return;
func1(n-1);/*递归函数调用自身,func(3)->func(2),func(2)->func(1)*/
for(i=1;i<n;i++)
{
for(j=2;j<flag1;j++)
{
printf("1+");
}
printf("%d+%d;",i,n-i);
}
if(flag1)
flag1--;
}
void func2(int n)
{
int i,j,k;
if(n==1||n==0)
return;
if(n%2==0)
func2(n-2);
else if(n%2==1)
{
k=n+1;
func2(k-2);
}
for(j=2;j<flag2;j++)
{
printf("1+");
}
for(i=1;i<n;i+=2)
{
printf("%d+%d; ",i,n-i);
}
if(flag2)
flag2--;
}
void main()
{
unsigned int n;
printf("请输入一个大于1的整数: ");
scanf("%u",&n);
flag1=n;
printf("%u所有的加数=",n);
func1(n);
printf("\n");
flag2=n;
printf("%u所有的奇数加数=",n);
func2(n);
printf("\n");
}
奇数输出的结果不对
比如,我输入 5
请输入一个大于1的整数: 5
5所有的加数=1+1+1+1+1;1+1+1+2;1+1+2+1;1+1+3;1+2+2;1+3+1;1+4;2+3;3+2;4+1
;
5所有的奇数加数=1+1+1+1+1; 1+1+1+3; 3+1; 1+1+4; 3+2;
Press any key to continue
我在
else if(n%2==1)
{
k=n+1;
func2(k-2);
}
这一步中, 把5加了1 成了6 ,他会给我输出当n=6的情况。
我怎样不要n=6的情况?或者有其他的方法?
求大神指点!!!!