• 从TAOCP开始,看看两数交换的简单实现

    最简单的方法
    服务器君一共花费 121.882 ms 进行了 4 次数据库查询,努力地为您提供了这个页面。
    广告很萌的

    接下来,我们进入另外一个算法探讨(TAOCP的算法E0):

    E0.[确保m >= n] 如果 m < n,交换 m 与 n 的值。

    这种算法题很简单,刚学C语言的人也能轻易写出,比如:

    #include "stdio.h"
    void main()
    {
        int m,n,k;
        printf("请输入两个不同的整数:\n");
        scanf("%d%d",&m,&n);
        printf("m = %d, n = %d\n", m, n);
        if(m < n)       //比较m与n的大小,确保m大,否则交换其值
        {
            k = m;
            m = n;
            n = k;
        }
        printf("执行交换后,m = %d, n = %d\n", m, n);
    }
    

    其实 TAOCP 引出 E0 这个算法小片段的本意是辗转相除法可能会用到交换两数,比如两个数的最小公倍数和最大公约数。通过反复求余运算直至余数为0,来求得最大公约数。一般要求第一个数大于第二个数。最小公倍数可由m,n和最大公约数(bcd)得到。scm=m*n/bcd. 给出的程序如下:

    #include "stdio.h"
    void main()
    {
        int m,n,t,k,r;
        printf("Please input two positive integers:\n");
        scanf("%d%d",&m,&n);
        t=m*n;
        if(m < n)       //比较m与n的大小,确保m大,否则交换其值
        {
            k = m;
            m = n;
            n = k;
        }
        while((r=m%n)!=0)   // 取余,辗转相除法,直到余数为0,此时的n即为最大公约数
        {
            m=n;
            n=r;
        }
        printf("The biggest common divisor is %d.\n",n);
        printf("The smallest common multiple is %d.\n",t/n);
    }
    

    虽然交换两数是本小节的一个算法片段,我们也不妨借题发挥,深入探讨一下交换两数的更多细节。

更多 推荐条目

Welcome to NowaMagic Academy!

现代魔法 推荐于 2013-02-27 10:23   

本章最新发布
随机专题
  1. [数据库技术] MySQL中英文混合排序 4 个条目
  2. [数据结构] 图的定义 1 个条目
  3. [移动开发] Android 开发调试工具 ADB 3 个条目
  4. [移动开发] Android根基概念Context 8 个条目
  5. [搜索引擎优化] 百度搜索引擎优化指南 3 个条目
  6. [Python程序设计] Django数据库模型 6 个条目
  7. [Python程序设计] urls.py设置技巧 8 个条目
  8. [智力开发与知识管理] 超越整体性学习 5 个条目
  9. [移动开发] ListView 使用相关问题集 1 个条目
  10. [PHP程序设计] 声明式编程范式 12 个条目
  11. [计算机算法] 两数交换的各种算法细节 2 个条目
  12. [PHP程序设计] PHP与函数式编程 1 个条目
窗口 -- [博客]