基本算法简介(一)

Author: 黄陀 Date: 2001年 22期

?牐牨嗾甙矗河?广大读者要求,希望我们向大家讲解一些编程基础知识。从这期开始,我们将连续向大家介绍一些在程序设计方面的基本算法。
  #1?牐犛谜纷喑ㄇ笞畲蠊际妥钚」妒?
  ?牐犖颐窃诔绦蛏杓浦校;嵊龅揭恍┰谝淮蠖咽葜校笳庑┦莨灿刑匦缘那榭觥O旅嫖颐且粤礁隼酉虼蠹医樯苷庵炙惴ā?
  ?牐犚话愕厮担笞钚」妒昧礁鍪幕宰畲蠊际纯桑笞畲蠊际辛街炙惴ǎ?
  ?牐?1.穷举法,从较小数由大到小列举,直到找到公约数立即中断列举,得到的公约数便是最大公约数,
  ?牐?2.辗转相除法,又名欧几里德算法,是计算最大公约数和最小公倍数的重要方法,比穷举法简便得多。
  ?牐犞饕淌牵ㄉ枇绞猘,b,a>b):
  ?牐?1)a除以b得余数c;
  ?牐?2)令a=c,b除以a得余数c;
  ?牐?3)如果a不等于b则跳回1),否则结束,最后一次的余数就是两数的最大公约数。
  ?牐犗旅嫖颐怯肅语言(Turbo C 2.0)来分别演示这两种方法。
  #2?牐牫绦蛞唬?
  ?牐?#include<stdio.h>
  ?牐爄nt max(a,b){?牓?
  ?牐爄f(a>=b)??
  ?牐爎eturn(a);?牔?
  ?牐爀lse
  ?牐爎eturn(b);}?牔牓?
  ?牐爄nt zdgys(int a,int b){?? ??
  ?牐爄nt m;??
  ?牐爁or(m=max(a,b);m>0;m--)??
  ?牐爄f((a%m==0)&&(b%m==0))break;??
  ?牐爎eturn(m);?爙 ??
  ?牐爄nt zxgbs(int a,int b,int y)??
  ?牐牓煟鹯eturn(a*b/y;}?牔牓?
  ?牐爉ain()?煟?
  ?牐牓煟鹖nt i,j,k,l;??
  ?牐爏canf("%d,%d",&i,&j);?牔?
  ?牐爇=zdgys(i,j);?牔?
  ?牐爈=zxgbs(i,j,k);?牔?
  ?牐爌rintf("%d和%d的最大公约数是:%d,最小公倍数是:%d",i,j,k,l)?牔? ??
  #2?牐牫绦蚨?
  ?牐?#include<stdio.h>
  ?牐爄nt zdgys(int a,int b)
  ?? ?煟?
  ?牐爄nt c,d;??
  ?牐爄f(b>a)??
  ?牐牓煟鹀=a;a=b;b=c;}?牓?
  ?牐爁or(;;)}?煢牔牐? ??
  ?牐燿=a%b;??
  ?牐爄f(d==0)?? break;??
  ?牐燼=b;??
  ?牐燽=d;}?? ??
  ?牐爎eturn(b);}?牔? ??
  ?牐爄nt zxgbs(int a,int b,int y)??
  ?牐牓煟鹯eturn(a*b/y;}?牔牓?
  ?牐爉ain()?煟?
  ?牐牓煟鹖nt i,j,k,l;??
  ?牐爏canf("%d,%d",&i,&j);?牔?
  ?牐爇=zdgys(i,j);??
  ?牐爈=zxgbs(i,j,k);?牔?
  ?牐爌rintf("%d和%d的最大公约数是:%d,最小公倍数是:%d",i,j,k,l);}?牔? ??
  ?牐犜闯绦蚩梢栽趆ttp://go8.163.com/~betterprogram/下载。