⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 分解数.txt

📁 背包程序
💻 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 + -