2024-10-30 11:45:00
#include "stdio.h"
void main()
{
int n,ns;int i,j,k,m;
printf("请输入n的值");
scanf("%d",&ns);//将输入n的值存入变量ns
n=ns;
printf("%d=%d\n",n,n);//输出n=n的情况 比如7=7
//核心思想n=(n-1)+1再把n-1看做n进行递归直到n=1
while(n)
{
m=n/2;//取n的一半
for(i=1;i<=m;i++)//对于任意整数都可以看做n/2种两个正整数的和
{
k=n-i;
printf("%d=%d+%d",ns,k,i);//输出n=a+b型
for(j=0;j<ns-n;j++)//ns可以看做n后面加ns-n个1
{
printf("+1");
}
printf("\n");//换行
}
n--;
}
scanf("%d",&k);//防止窗口马上关闭 输入任意数回车关闭
}
我觉得输出结果应该为:
7=7
7=6+1
7=5+2
7=5+1+1
7=4+3
7=4+2+1
7=4+1+1+1
7=3+3+1
7=3+2+1+1
7=3+1+1+1+1
7=2+2+2+1
7=2+2+1+1+1
7=2+1+1+1+1+1
7=1+1+1+1+1+1+1
能不能再修改下代码,我给你最佳.
不好意思 原来我少考虑了一些情况 参考楼上的算法
#include "stdafx.h"
#include
int a[100] ; int y;int N;
void outresult(int k)
{
int j;
printf("%d=%d",N,a[0]);
for(j=1;j=1 ;j--)
if (k==0||j<=a[k-1])
{
a[k]=j;
rd(i-j,k+1) ;
}
}
int _tmain(int argc, _TCHAR* argv[])
{
printf("请输入N");
scanf("%d",&N);
rd(N,0);
scanf("%d",&y);
return 0;
}
2024-10-30 11:23:06