辗转相除法求最大公约数和最小公倍数.docVIP

辗转相除法求最大公约数和最小公倍数.doc

  1. 1、本文档共4页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
辗转相除法求最大公约数和最小公倍数.doc

辗转相除法求最大公约数和最小公倍数 1: /*辗转相除法基于如下原理:两个整数的最大公约数等于其中较小的数和两数的差的最大公约数。   2: 例如,252和105的最大公约数是21(252 = 21 × 12;105 = 21 × 5);   3: 因为252 ? 105 = 147,所以147和105的最大公约数也是21。在这个过程中,较大的数缩   4: 小了,所以继续进行同样的计算可以不断缩小这两个数直至其中一个变成零。这时,所剩下的   5: 还没有变成零的数就是两数的最大公约数。   6: */   7: #include stdio.h   8:   9: int getGCDAndLCM(int a,int b){   10:???? int max=ab?a:b;//将较大的数赋给max   11:???? int min=(max=a)?b:a;//将较小的数赋给min   12:???? int temp;//暂时存储变量   13:???? while(max!=0){   14:???????? temp=min%max;   15:???????? min=max;   16:???????? max=temp;   17:???? }   18:???? printf(最大公约数为%d\n,min);   19:???? printf(最小公倍数为%d\n,a*b/min);   20: }   21:   22: int main(){   23:???? printf(输入两个数整数值\n);   24:???? int a,b;   25:???? scanf(%d,a);   26:???? scanf(%d,b);   27:???? getGCDAndLCM(a,b);   28:???? return 0; 29: } C语言水仙花数算法打印出所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数   本身。例如:153是一个“水仙花数”,因为153=1的三次方+5的三次方+3的三次方。   1.程序分析:利用for循环控制100-999个数,每个数分解出个位,十位,百位。   2.程序源代码:   main()   {   int i,j,k,n;   printf(water flowernumber is:);   for(n=100;n1000;n++)   {   i=n/100;/*分解出百位*/   j=n/10;/*分解出十位*/   k=n;/*分解出个位*/   if(i*100+j*10+k==i*i*i+j*j*j+k*k*k)   {   printf(%-5d,n);   }   }   printf(\n);   }  C数字移动当前位置:首页挖经验题库中心C/C++语言程序百例100.数字移动   100.数字移动作者:不详 来源:互联网  酷勤网收集 2008-04-25   摘要   酷勤网  在图中的九个点上,空出中间的点,其余的点上任意填入数字1到8;1的位置固定不动,然后移动其余的数字,使1到8顺时针从小到大排列.移动的规律是:只能将数字沿线移向空白的点.请编程显示数字移动过程。思考题:编写更优化的程序,尽可能减少移动的步数。   在图中的九个点上,空出中间的点,其余的点上任意填入数字1到8;1的位置固定不动,然后移动其余的数字,使1到8顺时针从小到大排列.移动的规律是:只能将数字沿线移向空白的点.   请编程显示数字移动过程。   *问题分析与算法设计   分析题目中的条件,要求利用中间的空白格将数字顺时针方向排列,且排列过程中只能借空白的点来移动数字.问题的实质就是将矩阵外面的8个格看成一个环,8个数字在环内进行排序,同于受题目要求的限制只能将数字沿线移向空白的点,所以要利用中间的空格进行排序,这样要求的排序算法与众不同.   观察中间的点,它是唯一一个与其它8个点有连线的点,即它是中心点.中心点的活动的空间最大,它可以向8个方向移动,充分利用中心点这个特性是算法设计成功与否的关键.   在找到1所在的位置后,其余各个数字的正确位置就是固定的.我们可以按照下列算法从数字2开始,一个一个地来调整各个数字的位置.   *确定数字i应处的位置;   *从数字i应处的位置开始,向后查找数字i现在的位置;   *若数字i现在位置不正确,则将数字i从现在的位置(沿连线)移向中间的空格,而将原有位置空出;依次将现有空格前的所有元素向后移动;直到将i应处的位置空出,把它移入再次空出中间的格.   从数字2开始使用以上过程,就可以完成全部数字的移动排序.   编程时要将矩阵的外边八个格看成一个环,且环的首元素是不定的,如果算法设计得

文档评论(0)

ziyouzizai + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档