一、题目名称:求多个数的最大公因数

二、算法设计:

1.输入数据
2.将数据用冒泡法由小到大排序;
3.将最小的数赋值给b;
4.判断是否所有的数是否能够整除b;
5.如果不能整除,b自减;
6.如果所有数都能整除b,那么b为这些数的最大公因数;

三、算法流程图:

最大公因数

最小公倍数

四、代码部分

#include<stdio.h>
#include<stdlib.h>void get_number(int array[],int b)             //用来获取数据
{int i=0;for (i=0;i<=b-1;i++){printf("请输入第%d个数:",i+1);scanf("%d",&array[i]);while(array[i]<=0){printf("请输入正整数\n");scanf("%d",&array[i]);}}printf("输入成功\n");printf("\n");}void BubbleSort(int array[],int n)
{int i,j,temp;                    //外循环控制循环趟数for(i=0; i<n-1; i++)             //内循环选择要进行比较的数{for(j=0; j<n-1-i; j++){if(array[j]>array[j+1]){temp=array[j];array[j]=array[j+1];array[j+1]=temp;}}}printf("排序后的这几个数:");for(i=0;i<n;i++) {printf("\t%d",array[i]);}}void manage(int array[],int b)                  //求取最大公因数
{int e; e=array[0];int c=1;int d=0;int f;f=array[b-1];while(c!=0){c=0;for(d=0;d<b;d++){if(array[d]%e==0){c+=0;}else{c+=1;}}if(c!=0)  e--;}printf("\n");printf("\n这几个数的最大公因数为:\t%d\n",e);c=1;while(c!=0){c=0;for(d=0;d<b;d++){if(f%array[d]==0){c+=0;}else{c+=1;}}if(c!=0)    f++;}printf("\n这几个数的最小公倍数为:\t%d\n\n\n\n",f);}void home()
{int a[50];int b;printf("求最大n个数的最大公因数");printf("\n");printf("请输入你要得到几个数的最大公因数:");scanf("%d",&b);get_number(a,b); BubbleSort(a,b);  manage(a,b);
}int main()
{while(1){home();}system("pause");return 0;
}

五、运行结果截图

1、正常运行

2、输入不正确的数后

六、测试部分

测试不同个数在程序运行下的最大公因数和最小公倍数
利用随机数函数生成n个随机数并且输入到数组中,求取数组中的数的最大公因数和最小公倍数。
随机数的范围:1~dis;
随机数个数:n;

#include<stdio.h>
#include<stdlib.h>
#define Random(x) (rand() % x) //通过取余取得指定范围的随机数void get_number(int array[],int b)
{int i;int dis;       //产生[0, dis)之间的随机数,注意不包括dis  printf("请输入随机数范围最大界限:");scanf("%d",&dis);      for(i=0; i<b; i++){   array[i]=Random(dis)+1; }} void BubbleSort(int array[],int n)
{int i,j,temp;                    //外循环控制循环趟数for(i=0; i<n-1; i++)             //内循环选择要进行比较的数{for(j=0; j<n-1-i; j++){if(array[j]>array[j+1]){temp=array[j];array[j]=array[j+1];array[j+1]=temp;}}}printf("排序后的这几个数:");for(i=0;i<n;i++) {printf("\t%d",array[i]);}}void manage(int array[],int b)                  //求取最大公因数
{int e; e=array[0];int c=1;int d=0;long int f;f=array[b-1];while(c!=0){c=0;for(d=0;d<b;d++){if(array[d]%e==0){c+=0;}else{c+=1;}}if(c!=0) e--;}printf("\n");printf("\n这几个数的最大公因数为:\t%d\n",e);c=1;while(c!=0){c=0;for(d=0;d<b;d++){if(f%array[d]==0){c+=0;}else{c+=1;}}if(c!=0)    f++;}printf("\n这几个数的最小公倍数为:\t%d\n\n\n\n",f);}void home()
{int a[50];int b;printf("求最大n个数的最大公因数");printf("\n");printf("请输入你要得到几个数的最大公因数:");scanf("%d",&b);get_number(a,b); BubbleSort(a,b);  manage(a,b);
}int main()
{while(1){home();}system("pause");return 0;
}

测试结果:
1~20之间的随机数
2~5之间的数字量




1~40之间的随机数
2~5之间的数量个数

在这里说明一下,测试的随机数是伪随机数,但是由于输入的数量数目的不同,就可以解决伪随机数这个问题。虽然这个获取随机的函数方法是更具环境来决定的,但是我们在获取随机数的时候只要有一处是采用了随机的方法,我们便获取了随机数。本次测试便是如此。通过变换想要取得数量的个数以及范围的大小,获得随机数。

这里也建议采用本次测试的方法的同学们,尽量将随机数个数和范围调小一点,不然计算机获取时间过长。

七、出现问题及心得体会

这次作业,本来感觉是比较简单的,但是整体实践下来,发现还是有不少问题对于现在的我来说还是比较困难的,自己的动手能力比较差,有些想法的实施缺乏经验,应该多加练习。
遇到的第一个问题就是我在确定好我的思路后,没有模块化我的完成过程。所以我在第一遍完成我的代码时,出错了,却无法具体到某一部分,先对于繁杂的检查过程,我发现还是从新设计一下我的思路,将处理过程模块化,然后分布进行。这样在检查的过程中能够很好地检查错误,更能高效的完成处理过程。
遇到的第二个问题便是我的核心处理过程。穷举法的思路出现了问题。还是过于自信,对于之前的2个数的最大公因数,我感觉很简单,但是发现实施还是有点困难。这次的多个数的最大公因数,需要解决的问题更多。
原先代码:

BubbleSort(a,i);  //冒泡法由小到大排序b=a[0];    //取最小的数while(c==0){for(d=0;d<i;d++){if(a[d]%b==0){c=0;// d++;}else{c=1;// break;}}b--;

}
改进后代码:

 while(c!=0){c=0;for(d=0;d<b;d++){if(array[d]%e==0){c+=0;}else{c+=1;}}if(c!=0)    e--;}

这前后的改进过程我发现一个清晰的程序设计图是多么重要。
本次实验我是采用数组的方式储存数据,然后用冒泡法进行排序,取组头最小数求最大公因数和去组尾求最小公倍数。但是从时间复杂度来说,利用这种排序法进行排序,然后利用穷举法求最大公因数和最小公倍数,不一定比我不给数组排序,直接从数组里面获得一个数实现穷举法获得结果要优化的多。我本想采用更加节省空间和时间的排序方法,但是回过头复习之前的课文,发现没有把它好好学到自己的脑子里面。平成作业应该要求自己用多种方法实现,及时发现自己在学习上的不足,然后快速补充。

求多个数的最大公因数和最小公倍数相关推荐

  1. 求n个数的最大公因数和最小公倍数(c)

    设计要点 可以通过反复求两个正整数的最大公因数和最小公倍数的方法来实现. 规定(a,b)为a,b的最大公因数,{a,b}为最小公倍数. 对于3个或3个以上的正整数,最大公约数与最小公倍数有以下性质: ...

  2. 【Java常用方法】求两个数的最大公因数、最小公倍数,两数是否互质

    最大公因数 最好的办法就是gcd辗转相除法.有两种方式,一种是迭代,一种是递归. //迭代版本 int gcd(int a,int b){while(b!=0){int r=b;b=a%b;a=r;} ...

  3. 练习题007:求两个数的最大公因数和最小公倍数

    C语言练习题目录索引 最大公约数:辗转相除法: 最小公倍数=两数之积 / 两者的最大公约数. #include <stdio.h> #include <windows.h>in ...

  4. 求一组数的最大公因数和最小公倍数

    求一组数的最大公因数和最小公倍数 求两个数的最大公因数和最小公倍数 1.辗转相除法 2.更相减损术 这里采用辗转相除法 #include <iostream> using namespac ...

  5. Python两种方式求多个数的最大公因数(HCF)和最小公倍数(LCM)

    Python两种方式求多个数的最大公因数(HCF)和最小公倍数(LCM) 最大公因数 1. 列表排序 2. 将列表分为两部分 3. 求最大公因数的质因子 4. 得到结果 5. 完整程序 最小公倍数 另 ...

  6. 求两个数的最大公因数

    这里提供两种方法:一种比较朴素,基本思想很简单就是按照从大到小的找能够匹配的因数,找到就返回:另一种是欧几里得算法,该算法的核心思想是,当前两个数的最大公因数的也是这两个数模的与其中一个元素的的最大公 ...

  7. python两个自定义函数_Python自定义函数实现求两个数最大公约数、最小公倍数示例...

    本文实例讲述了Python自定义函数实现求两个数最大公约数.最小公倍数.分享给大家供大家参考,具体如下: 1. 求最小公倍数的算法: 最小公倍数  =  两个整数的乘积 /  最大公约数 所以我们首先 ...

  8. LeetCode刷题: 【914】卡牌分组(求N个数的最大公因数)

    1. 题目 2. 思路 如何求N个数的最大公因数呢?(N > 1) 在初等数学里,有这么几个定理 1.任何一个整数,都可以分解为素数因子的乘积 比如 24 = 2* 2* 2 * 3: 26 = ...

  9. 求N个数的最大公因数(算法)

    在一般的程序设计书里面,都有关于求两个数的最大公因数的算法(或者叫做最大公约数).求两个数的最大公约数算法用的最多的是辗转相除法. 基本思路就是 getCommonMutiple(a,b){  //这 ...

  10. c语言在多个数数最大数,求多个数的最大公因数算法 C语言

    我们用(a1,a2,....)表示最大公因数  [a1,a2,.....]表示最小公倍数 1.两个数的最大公因数 辗转相除法,可以直接使用C语言自带的 c = __gcd(a,b): 辗转相除法原理可 ...

最新文章

  1. AutoML未来可期,工程师的明天何去何从?
  2. python计算文件md5值_用python 正确计算大文件md5 值
  3. 史上最强画图工具推荐
  4. what do we lack as a student?
  5. SSH框架中不为人知的细节(一)
  6. consul php,go-micro+php+consul实现简单的微服务
  7. 计算机应用管理专业能干什么,计算机应用技术专业可以做什么?
  8. ORACLE报错(5)ORA-01102: cannot mount database in EXCLUSIVE mode
  9. 华为认证考试HCIA H12-811 Datacom数通考试真题题库【带答案刷题必过】【第二部分】
  10. 《数据挖掘导论》学习 | 第十章 异常检测
  11. 完美解决failed to open stream: HTTP request failed!(file_get_contents引起的)
  12. perfmon 端口修改_Jmeter插件之PerfMon监控插件使用说明
  13. deepin做服务器稳定吗,deepin从兴致勃勃到彻底放弃
  14. robomongo 连不上mongodb 权限问题
  15. java生成AES秘钥
  16. linux定时启动服务
  17. “牌面”养成记4:阅读顺序,工具,以及小成果
  18. Schema being registered is incompatible with an earlier schema
  19. 公众号第三方平台和微信公众号平台的区别与开发步骤
  20. 评测 | HDR领航者,飞利浦HDR1000显示器评测

热门文章

  1. 升级yosemite后java出错的解决
  2. c++17好用的新特性总结
  3. 编程入门书籍:大学学习计算机基础必读 5 本经典入门书籍,收藏
  4. jira是干什么_JIRA是什么? | 学步园
  5. uos已连接网络但无法访问互联网
  6. 计算与推断思维 五、表格
  7. SQL 遇到以零作除数错误——用NULLIF()函数处理为0的分母
  8. 压倒eBay 挑战亚马逊 Shopify到底厉害在哪儿?
  9. 无法听到计算机发出的声音怎么办,qq语音听不到对方的声音怎么办_电脑qq语音我听不到对方声音修复方法-win7之家...
  10. 大唐凌烟阁二十四功臣