求N个数的最大公约数和最小公倍数及Hanks博士问题

一、 题目名称:
求N个数的最大公约数和最小公倍数及Hanks博士问题

二、 题目内容:
1、求N个数的最大公约数和最小公倍数。
2、已知正整数a0,a1,b0,b1,设某未知正整数x满足:
(1) x和a0的最大公约数是a1;
(2) x和b0的最小公倍数是b1。
求x的个数

三、 算法设计:

基本要求:
1.输入需要数据个数N以及数据data[N]
2.检验数据是否符合规范1
3.若符合,分别执行执行求N个数的最大公约数方法以及最小公倍数算法,若不符合,则输出错误。

提高要求
1.输入需要n行数据以及每行的4个数据。
2.判断数据是否符合规范2
3.若符合,执行找x个数的算法,若不符合,则输出错误

基本要求:
在这里插入图片描述
在这里插入图片描述

提高要求:
在这里插入图片描述在这里插入图片描述

四、调试截图:
1.调试输入部分,确保程序能由接收到输入。
在这里插入图片描述
                                              图 1 调试“输入”

2.调试求最大公约数部分,验证方法是否正确。
在这里插入图片描述
                                             图 2 调试“最大公约数”

3 .调试求最小公倍数部分,验证方法是否正确。
在这里插入图片描述
                                           图 3 调试“最小公倍数”

4.调试求x方法,验证方法过程是否正确
在这里插入图片描述
                                            图 4 调试“求x个数”

5.调试数据检验方法,验证方法过程是否正确
在这里插入图片描述
                                                图 5 调试“数据检验”

五、测试结果:
1.结果测试
基本要求:

Data[0]  Data[1]  Data[2]  Data[3]  Data[4]  最大公因数  最小公倍数
    2           6                                                         2                   6 
   36         27           54                                         9                 108
   23         41           37         25                            1               872275
   55         20           35        100        60               5                23100

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

提高要求:

Array[0]  Array[1]  Array[2]  Array[3]  X 的个数
    41           1            96         288            2
    95           1            37        1176           6
    33           3            69          27             0
    42           1            86          24             0

在这里插入图片描述
在这里插入图片描述

若输入数据错误:
在这里插入图片描述

六、遇到的困难及解决方案:
1、报错:cannot make a static reference to the non-static method ManyDivisor(int[],int)from the type Two2
在这里插入图片描述

报错原因:在静态的main方法中调用了动态的ManyDivisor()方法。
解决方法:在方法前 ManyDivisor(data , N)加上new Two().来实现调用
代码:

System.out.println("这"+N+"个数的最大公因数为"+new Two().ManyDivisor(data , N));	

2.不清楚怎么写计算结果不为整数
在这里插入图片描述

解决方法:用a/b == a*1.0/b方法实现结果为整数
代码:

(array[j][3]/array[j][2])!=(array[j][3]*1.0/array[j][2])
(array[j][0]/array[j][1])!=(array[j][0]*1.0/array[j][1])

3、“输入的数据太苛刻了,竟然没有x符合要求”与“满足x的个数为:0”重复了
在这里插入图片描述

解决办法:用if-else语句解决
代码:

if(num==0) {
   	//没有x符合条件情况
				System.out.println("第"+(j+1)+"行输入的数据太苛刻了,竟然没有x符合要求");
			}else {
   			//有x符合条件情况
	        	System.out.println("第"+(j+1)+"行满足x的个数为:"+num)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值