博客
关于我
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 | shiv,一个超酷的 打包工具 Python 库!
    查看>>
    python | six,一个神奇的 Python 库!
    查看>>
    Python读取图片的几种方法供net使用
    查看>>
    python | spacy,一个神奇的 Python 库!
    查看>>
    python | sqlmap,一个实用的 Python 库!
    查看>>
    python | sumy,一个超酷的 用于文本摘要的 Python 库!
    查看>>
    python | tiler,一个不可思议的 图像切片重组 Python 库!
    查看>>
    python | tinydb,一个非常厉害的 关于数据库的 Python 库!
    查看>>
    python | tox,一个超强的 自动化测试工具 Python 库!
    查看>>
    python | ttkbootstrap,一个神奇的 Python 库!
    查看>>
    python | unoconv,一个超厉害的 Python 库!
    查看>>
    python | urllib3,一个超强的 Python 库!
    查看>>
    python | webassets,一个超强的 Python 库!
    查看>>
    python | werkzeug,一个不可思议的 Python 库!
    查看>>
    python | xlsxwriter,一个实用的 Python 库!
    查看>>
    python | xlwings,一个非常实用的 Excel 相关的 Python 库!
    查看>>
    python | xmltodict,一个非常厉害的 关于XML数据 Python 库!
    查看>>
    python | xonsh,一个超酷的 Python 库!
    查看>>
    python | yagmail,一个实用的 Python 库!
    查看>>
    python | 一文掌握Python的上下文管理器和with语句
    查看>>