一、 题目名称:
求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)