博客
关于我
7-14 整数分解为若干项之和 (15分)(附详细讲解(不用递归的高效算法))
阅读量:804 次
发布时间:2019-03-25

本文共 2058 字,大约阅读时间需要 6 分钟。

针对正整数N分解为多个正整数之和的问题,我们需要列举所有可能的分解方法,并按照递增顺序输出。这种分解方法可以采用递归的策略,每次从分解结果中找到一个可以合并的最右边部分,从而逐步简化问题。

针对输入的N=7,分解的思路是:

  • 首先生成一个全由1组成的数组,长度等于N本身;
  • 然后通过不断地合并相邻的部分,直到数组长度再减少为止;
  • 每次合并可以有两种选择:靠近右边的数字是否可以合并,或者需要进行递归调整以保持递增顺序。
  • 通过这种方式,我们可以得到所有可能的分解式子。

    改进后的算法直接在代码中处理分解过程,而不是通过递归调用,从而提高运行效率。这种方法尤其适用于较大的N值(如60及以上),性能提升显著。

    改进后的代码如下:

    #include 
    int main(void) { int n, i, len, origin, count, temp; int leap = 1; int a[30] = {0}; scanf("%d", &n); len = n; origin = len; for (i = 0; i < len; ++i) a[i] = 1; for(;;) { up: if (leap != 1) { printf("; "); printf("%d = ", n); for (i = 0; i < len; ++i) if(i == 0) printf("%d", a[i]); else printf("+%d", a[i]); ++count; if (count == 4) { printf("\n"); count = 0; } } if (a[0] == n) break; if (a[len-1] - a[len-2] <= 4) { ++a[len-2]; if (a[0] == n) goto up; --a[len-1]; temp = a[len-1]; for (i = len-1; i < origin; ++i) { if ((temp - a[len-2]) < a[len-2] && (temp - a[len-2]) != 0) { a[i] = a[len-2]; len = i + 1; temp -= a[len-2]; goto up; } } if (temp == 0) { if (a[len-1] == a[len-2] || (a[len-1] - a[len-2] == 1)) { a[len-2] += a[len-1]; --len; goto up; } if (a[0] > n) goto end; } else { a[len-1] -= 1; a[len-2] += 1; if (a[0] > n) goto end; } } else { a[len-1] -= 1; a[len-2] += 1; if (a[0] > n) goto end; } } end: return 0;}

    这种改进的算法直接在循环体内处理分解过程,减少了函数调用开销,显著提升了性能,特别是对于较大的N(如60及以上),效率提升明显。

    转载地址:http://rtnyk.baihongyu.com/

    你可能感兴趣的文章
    Python——正则表达式
    查看>>
    Python—面向对象2
    查看>>
    Python“和“带整数的运算符
    查看>>
    Python“文件存在“制作目录时出错
    查看>>
    Python“文件存在“制作目录时出错
    查看>>
    Python、IMAP 和 GMail.将消息标记为已查看
    查看>>
    python一个一个获取迭代器的元素
    查看>>
    python一维数组 提取_python – 如何从numpy中的1维数组中提取零维切片
    查看>>
    python三大库之--numpy(一)
    查看>>
    python三大库之--numpy(二)
    查看>>
    python上的字无效字符_标识中的无效字符
    查看>>
    python下用decode和encode 中文转码
    查看>>
    Python下调用Linux的Shell命令
    查看>>
    Python接口自动化测试实战系列
    查看>>
    python下载_安装_配置_以及第一行python程序---python工作笔记009
    查看>>
    Python不协调机器人消息.内容
    查看>>
    Python与C#之间内存共享互传信息
    查看>>
    python与c语言混合编程_你试过C语言和Python一起混合编程吗?两者相加不是已经无敌了!...
    查看>>
    python与excel
    查看>>
    Python与Excel的完美邂逅:深入浅出,手把手教你轻松玩转Excel数据操作
    查看>>