对于正整数N,输出其和等于N且满足以下限制条件的所有正整数的和式
来源:互联网 发布:人族剑士捏脸数据 编辑:程序博客网 时间:2024/05/22 01:58
4=4
4=3+1
4=2+2
4=2+1+1
4=1+1+1+1
程序中分别采用递归和非递归解法的两个函数RD()和ND()。
函数RD()采用递归解法,它有两个参数N和K。其意义分别是被分解和式的数N,及当前第K度分解。算法思想是对N的所有合理的和式分解,将分解出的数(称为和数)存于数组A{}中。当其中一个分解已不再需要进一步分解时,即找到一个解,将存于数组A{}中的一个完整和式的和数输出。当还需要进一步分解时,以要进一步分解的数及分解深度为参数,递归调用分解和式函数。
int a[100],r[100];
void rd(int n,int k)
{
int i = 0,j = 0;
for(j = n<a[k-1]?n:a[k-1];j>=1;j--) //!!!!!!!!!
{
a[k] = j;
if(j == n)
{
printf("%d = %d",a[0],a[1]);
for(i = 2;i <= k;i++) //!!!!!!!!!!!!!!!!!!!!!!
{
printf("+%d",a[i]);
}
printf("\n");
}
else
{
rd(n-j,k+1); //!!!!!!!!!!!!!!!!!!!!
}
}
}
void nd(int n)
{
int i =0;
int k = 0;
r[0] = n;
do{
if(r[k]== 0) //!!!!!!!!!!!!1
{
printf("%d = %d ",a[0],a[1]);
for(i = 2;i <=k;i++)
{
printf("+%d",a[i]);
}
printf("\n");
while(k > 0&&a[k] == 1) //!!!!!!!!!!!!
{
k--;
}
if(k > 0)
{
a[k]--;
r[k]++;
}
}
else
{
a[k+1] = a[k] < r[k]?a[k]:r[k];
r[k+1] = r[k] - a[k+1];
k++;
}
}
while(k>0);
}
- 对于正整数N,输出其和等于N且满足以下限制条件的所有正整数的和式
- JAVA:递归实现输出正整数和等于n的所有不增的正整数和式
- 用递归方法 实现 输出正整数和等于n的所有正整数和式
- 面试题:输入一个正整数n,输出所有的连续正整数之和等于n的序列
- 求正整数n所有可能的和式的组合
- 求正整数n所有可能的和式的组合
- 求正整数n所有可能的和式的组合
- 求正整数n所有可能的和式的组合
- 正整数n的所有可能和式的组合
- 求正整数n所有可能的和式的组合
- 求正整数n所有可能的和式的组合
- 求正整数n所有可能的和式的组合
- 求正整数n所有可能的和式的组合。
- 求正整数n所有可能的和式的组合
- 求正整数 n 所有可能的和式的组合
- 输出所有小于等于n(n为一个大于2的正整数)的素数
- 输入任意一个大于2的正整数n,输出所有小于等于n的素数
- java实现输入一个正整数n,输出全部连续正整数相加后等于n的所有序列。
- Java和xml的互相转换
- Centos 6.5 ISO 文件挂载方法
- 回文数组(dp)
- thinkpad p50 install linux(drivers download)
- Tensorflow-吴恩达老师课程笔记
- 对于正整数N,输出其和等于N且满足以下限制条件的所有正整数的和式
- WM_PAINT介绍及OnPaint()函数的作用原理
- java坦克大战(窗体)
- console.log无反应,无输出问题
- JavaSE基础学习总结(2)
- 字符串处理
- 数组中两个元素最小的距离
- 总结-2017/9/17
- 剑指Offer--10.矩形覆盖