Java求两个正整数的最大公约数和最小公倍数
- 格式:pdf
- 大小:61.27 KB
- 文档页数:2
一、填空题1、Java提供“包”来管理类名空间。
“包”实际上提供了一种_命名机制_和可见性限制机制。
2、使用createScreenCapture() 方法可以复制屏幕的一个矩形区域。
3、Final关键字修饰变量,则该变量_常量_。
Final修饰方法,则该方法_不允许其子类覆盖_。
Final修饰类,则该类_不会再被扩展_。
5、Java程序分两种,_ Java Application _和_Java Applet_。
6、final 关键字表明一个对象或变量在初始化不能修改。
7、在Java语言中,_ RandomAccessFile_文件允许对文件内容的随机读写。
8、一个Java的图形用户界面的最基本组成部分是_组件(Component)_。
9、java的特点:简单、面向对象、平台无关、多线程、安全、动态。
二、判断题1、在Java语言中,常量true、false、null都是使用小写。
y2、Package语句必须放在程序的第一句。
y3、因为Java不支持多继承,所以定义类时implements关键字后面只能说明一个接口名。
N4、我们把客观世界的实体称为问题空间的对象。
N5、一个Java类可以有多个父类。
N6、抽象类必须被继承。
Y7、在Java中声明变量时必须指定一个类型。
Y8、传统的结构化程序设计方法是产生60年代末开始的软件危机的原因。
N9、当通过实现Listener接口完成事件处理时,要同时实现该接口中的所有方法。
10、对多线程的支持是Java的一大特点。
Y三、选择题1、信息资源放在Web服务器后,需要把它的地址告诉大家,这就是b 的功能。
A.WWWB.URLC.BBSD.TCP/IP2、以下关于Applet的生命周期方法的说法哪个是不正确的?(d )A、init()B、start()C、stop()D、main()4、AWT中的Canvas类在使用时必须被(d )。
A.载入B.封装C.继承D.重载5、Java语言中的super关键字是(c )A.指向父类的指针B.父类的标识符C.对父类的引用D.指向父类对象的指针6、下列特点不属于Java语言的选项是(b )。
//求长整型数a和长整型数b的最大公约数和最小公倍数,Test类为主类class GreatestCommonDivisor //求长整型数a和长整型数b的最大公约数,同时输出a和b的所有约数{private long a;private long b;private Divisor aDivisor;private Divisor bDivisor;GreatestCommonDivisor(){a = 1;b = 1;aDivisor = new Divisor();bDivisor = new Divisor();}GreatestCommonDivisor(long a,long b){this.a = a;this.b = b;aDivisor = new Divisor(a);bDivisor = new Divisor(b);}public void setA(long a){this.a = a;}public long getA(){return a;}public void setB(long b){this.b = b;}public long getB(){return b;}public void setADivisor(Divisor aDivisor){this.aDivisor = aDivisor;}public Divisor getADivisor(){return aDivisor;}public void setBDivisor(Divisor bDivisor){this.bDivisor = bDivisor;}public Divisor getBDivisor(){return bDivisor;}/** 直接求两个数a和b的最大公约数,用较大数依次除以较小数的所有约数,其中最大的约数即为最大公约数* 即用较小数的所有约数,包括较小数本身,按照从大到小的顺序依次去除较大数* 第一个能把较大数除尽的数就是最大公约数public long getGreatestCommonDivisor(){long result = 1;long n = 0;if(a==0){result = b;}else if(b==0){result = a;}else{long absA = 1;long absB = 1;long littleNumber = 1;long bigNumber = 1;absA = Math.abs(a);absB = Math.abs(b);if(absA<absB){littleNumber = absA;bigNumber = absB;}else{littleNumber = absB;bigNumber = absA;//System.out.println("littleNumber=" + littleNumber);//System.out.println("bigNumber=" + bigNumber);long i = littleNumber;while(i>1){if(bigNumber%i==0){break;}else{do{i--;}while(littleNumber%i!=0);if(bigNumber%i==0){break;}}}if(a<0 && b<0){result = -i;}else if(a>0 && b>0){result = i;}else{result = 1;}}return result;}*/public long getGreatestCommonDivisor(){long result = 1;if(getA()==0){if(getB()!=0){result = getB(); //定义0与另一个非零数a的最大公约数GCD(0,a)=a }elseresult = 1; //定义0与0的最大公约数GCD(0,0)=1}}else if(getB()==0){if(getA()!=0){result = getA(); //定义0与另一个非零数a的最大公约数GCD(0,a)=a }else{result = 1; //定义0与0的最大公约数GCD(0,0)=1}}else //求两个非零数的最大公约数{long commonDivisor[];commonDivisor=aDivisor.getCommonDivisor(bDivisor);for(int i = 1;i<(int)commonDivisor[0];i++){if(result<commonDivisor[i]){result = commonDivisor[i];}}if(getA()<0 && getB()<0){result = -result; //两个负数的最大公约数是负数}else if(getA()>0 && getB()>0) //两个正数的最大公约数已经求出,不做处理{}else{result = 1; //两个异号数的最大公约数是1}}return result;}public void displayGreatestCommonDivisor(){System.out.println(getA() + "和"+ getB() + "的最大公约数是:"+ getGreatestCommonDivisor());}}class Divisor //求长整型a的所有约数{private long a;private long divisor[];private final int MAXIMUMINDEXOFDIVISOR = 10000;Divisor(){a = 1;divisor = new long[MAXIMUMINDEXOFDIVISOR];divisor[0] = 1;divisor[1] = 1;for (int i = 2;i<MAXIMUMINDEXOFDIVISOR;i++){divisor[i] = 1;}}Divisor(long a){if(a>=0){a = a;}else{a = -a;}this.a = a;divisor = new long[MAXIMUMINDEXOFDIVISOR];divisor[0] = 1;divisor[1] = 1;int index = 2;//数字a的约数的顺序号for (long j = 2;j<=getA();j++){if(getA()%j==0){divisor[index] = j;System.out.printf("divisor[index]=%5d\t",divisor[index]);index++;}}index--;divisor[0] = index;System.out.printf("divisor[0]=%5d\n",divisor[0]);for(int j = index + 1;j<MAXIMUMINDEXOFDIVISOR;j++){divisor[j] = 1;}}public void setA(long a){if(a>=0){this.a = a;}else{this.a = -a;}}public long getA(){return a;}public void setDivisor(){divisor[0] = 1;divisor[1] = 1;int index = 1;//属性a的约数的顺序号for(long j = 2;j<=getA();j++){if(getA()%j==0){index++;divisor[index] = j;}}divisor[0] = index;for(int j = index + 1;j<MAXIMUMINDEXOFDIVISOR;j++){divisor[j] = 1;}}public long[] getDivisor(){return divisor;}public long[] getCommonDivisor(Divisor aDivisor) //求本对象的成员变量a和另一个类Divsior型对象中的成员变量a的所有公约数{long []result = new long[MAXIMUMINDEXOFDIVISOR];long otherDivisor[] = aDivisor.getDivisor();int littleIndex = (int)(divisor[0]<otherDivisor[0]?divisor[0]:otherDivisor[0]);int bigIndex = (int)(divisor[0]>otherDivisor[0]?divisor[0]:otherDivisor[0]);//System.out.printf("littleIndex=%5d\tbigIndex=%5d\t",littleIndex,bigIndex);int commonDivisorIndex = 1;result[0] = 1;result[1] =1;for(int i = 2;i<=littleIndex;i++){for(int j = 2;j<=bigIndex;j++){if(divisor[i]==otherDivisor[j]){commonDivisorIndex++;result[commonDivisorIndex] = divisor[i];}}}result[0] = commonDivisorIndex;for(int j = commonDivisorIndex + 1;j<MAXIMUMINDEXOFDIVISOR;j++){result[j] = 1;}return result;}public void displayDivisor(){long aDivisor[];aDivisor = getDivisor();System.out.println(getA() + "有" + aDivisor[0] + "个约数,分别是:");for(int i = 1;i<=aDivisor[0];i++){System.out.printf("\t%10d",aDivisor[i]);}}}class LeastCommonMultiple //求成员变量a和成员变量b的最小公倍数{private long a;private long b;LeastCommonMultiple(){a = 1;b = 1;}LeastCommonMultiple(long a,long b){this.a = a;this.b = b;}public void setA(long a){this.a = a;}public long getA(){return a;}public void setB(long b){this.b = b;}public long getB(){return b;}public long getLeastCommonMultiple(){GreatestCommonDivisor gCD = new GreatestCommonDivisor(a,b);long result = 1;if(a==0 && b==0) //定义0和一个数a的最小公倍数LCM(0,a)=0{result = 0;}else{result = a * b / gCD.getGreatestCommonDivisor();}return result;}public void displayLeastCommonMultiple(){System.out.println(getA() + "和"+ getB() + "的最小公倍数是:"+ getLeastCommonMultiple());}}public class Test{public static void main(String [] args){GreatestCommonDivisor gCD = new GreatestCommonDivisor(40,60);gCD.displayGreatestCommonDivisor();LeastCommonMultiple leastCommonMultiple = new LeastCommonMultiple(gCD.getA(),gCD.getB());leastCommonMultiple.displayLeastCommonMultiple();/*GreatestCommonDivisor greatestCommonDivisor = new GreatestCommonDivisor(40,0);SubGreatestCommonDivisor subGreatestCommonDivisor = new SubGreatestCommonDivisor(greatestCommonDivisor.getA(),greatestCommonDivisor.getB());System.out.println(greatestCommonDivisor.getA() + "和"+ greatestCommonDivisor.getB() + "的最大公约数是:"+ greatestCommonDivisor.getGreatestCommonDivisor());System.out.println(subGreatestCommonDivisor.getA() + "和"+ subGreatestCommonDivisor.getB() + "的最小公倍数是:"+ subGreatestCommonDivisor.getGreatestCommonDivisor());*/}}。
输入两个正整数,m和n,求其最大公约数和最小公倍数。
1. 输入两个正整数,m和n,求其最大公约数和最小公倍数。
2. 输入一行字符,分别统计出其中字母、空格、数字和其他字符的个数。
3. 输入一个正整数求出它是几位数;输出原数和位数。
4. 输入一个正整数,输出原数并逆序打印出各位数字。
5. 从键盘上输入若干学生的一门课成绩,统计并输出最高成绩和最低成绩及相应的序号,当输入负数时结束输入。
6. 从键盘上输入若干学生的一门课成绩,计算出平均分,当输入负数时结束输入。
将结果输出。
7. 求1!+2!+3!+……+20!,将结果输出。
8. 打印以下图案: ****************9. 打印以下图案:**********10. 求下列试子的值:1-1/2+1/3-1/4+……+1/99-1/100,将结果输出。
11. 打印出100,999之间的所有水仙花数。
12. 求S(Sn)=a+aa+aaa+…+aa…a之值,n,a由键盘输入。
n13. 打印以下图案:****************************14.打印以下图案:112112321123432115. 打印以下图案:123432112321121116.编写一个统计学生成绩程序,完成以下功能:输入4个学生的2门课成绩;求出全班的总平均分,将结果输出。
17. 打印以下图案:*************************18.给出年、月、日,计算该日是该年的第几天。
19.求一个3*3的整型矩阵对角线元素之和。
将原矩阵和求出的和输出。
20.求一个4*3的矩阵各行元素的平均值;将原矩阵和求出的平均值全部输出。
21.求一个3*4的矩阵各列元素的平均值;将原矩阵和求出的平均值全部输出。
22.求一个3*5的矩阵各列元素的最大值,将原矩阵和求出的最大值全部输出。
23.求一个4*3的矩阵各行元素的最大值,将原矩阵和求出的最大值全部输出。
24.求一个M*N的矩阵中元素的最大值,将原矩阵和求出的最大值全部输出。
输入两个正整数,m和n,求其最大公约数和最小公倍数。
1. 输入两个正整数,m和n,求其最大公约数和最小公倍数。
2. 输入一行字符,分别统计出其中字母、空格、数字和其他字符的个数。
3. 输入一个正整数求出它是几位数;输出原数和位数。
4. 输入一个正整数,输出原数并逆序打印出各位数字。
5. 从键盘上输入若干学生的一门课成绩,统计并输出最高成绩和最低成绩及相应的序号,当输入负数时结束输入。
6. 从键盘上输入若干学生的一门课成绩,计算出平均分,当输入负数时结束输入。
将结果输出。
7. 求1!+2!+3!+……+20!,将结果输出。
8. 打印以下图案: ****************9. 打印以下图案:**********10. 求下列试子的值:1-1/2+1/3-1/4+……+1/99-1/100,将结果输出。
11. 打印出100,999之间的所有水仙花数。
12. 求S(Sn)=a+aa+aaa+…+aa…a之值,n,a由键盘输入。
n13. 打印以下图案:****************************14.打印以下图案:112112321123432115. 打印以下图案:123432112321121116.编写一个统计学生成绩程序,完成以下功能:输入4个学生的2门课成绩;求出全班的总平均分,将结果输出。
17. 打印以下图案:*************************18.给出年、月、日,计算该日是该年的第几天。
19.求一个3*3的整型矩阵对角线元素之和。
将原矩阵和求出的和输出。
20.求一个4*3的矩阵各行元素的平均值;将原矩阵和求出的平均值全部输出。
21.求一个3*4的矩阵各列元素的平均值;将原矩阵和求出的平均值全部输出。
22.求一个3*5的矩阵各列元素的最大值,将原矩阵和求出的最大值全部输出。
23.求一个4*3的矩阵各行元素的最大值,将原矩阵和求出的最大值全部输出。
24.求一个M*N的矩阵中元素的最大值,将原矩阵和求出的最大值全部输出。
java编程练习题及答案【篇一:java基础编程练习题(50题及答案)2017】class=txt>【程序1】题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?//这是一个菲波拉契数列问题public class lianxi01 {public static void main(string[] args) {system.out.println(第1个月的兔子对数: 1);system.out.println(第2个月的兔子对数: 1);int f1 = 1, f2 = 1, f, m=24;for(int i=3; i=m; i++) {f = f2;f2 = f1 + f2;f1 = f;system.out.println(第 + i +个月的兔子对数: +f2);}}}【程序2】题目:判断101-200之间有多少个素数,并输出所有素数。
程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除,则表明此数不是素数,反之是素数。
public class lianxi02 {public static void main(string[] args) {int count = 0;for(int i=101; i200; i+=2) {boolean b = false;for(int j=2; j=math.sqrt(i); j++){if(i % j == 0) { b = false; break; }else{ b = true; }}if(b == true) {count ++;system.out.println(i );}}system.out.println( 素数个数是: + count);}}【程序3】题目:打印出所有的水仙花数,所谓水仙花数是指一个三位数,其各位数字立方和等于该数本身。
JAVA经典算法⾯试40题及答案现在是3⽉份,也是每年开年企业公司招聘的⾼峰期,同时有许多的朋友也出来找⼯作。
现在的招聘他们有时会给你出⼀套⾯试题或者智⼒测试题,也有的直接让你上机操作,写⼀段程序。
算法的计算不乏出现,基于这个原因我⾃⼰搜集了⼀些算法上的题型。
希望对于⼤家有所帮助。
【程序1】题⽬:古典问题:有⼀对兔⼦,从出⽣后第3个⽉起每个⽉都⽣⼀对兔⼦,⼩兔⼦长到第四个⽉后每个⽉⼜⽣⼀对兔⼦,假如兔⼦都不死,问每个⽉的兔⼦总数为多少?1.程序分析:兔⼦的规律为数列1,1,2,3,5,8,13,21….public class exp2{public static void main(String args[]){int i=0;for(i=1;i<=20;i++)System.out.println(f(i));}public static int f(int x){if(x==1 || x==2)return 1;elsereturn f(x-1)+f(x-2);}}或public class exp2{public static void main(String args[]){int i=0;math mymath = new math();for(i=1;i<=20;i++)System.out.println(mymath.f(i));}}class math{public int f(int x){if(x==1 || x==2)return 1;elsereturn f(x-1)+f(x-2);}}【程序2】题⽬:判断101-200之间有多少个素数,并输出所有素数。
1.程序分析:判断素数的⽅法:⽤⼀个数分别去除2到sqrt(这个数),如果能被整除,则表明此数不是素数,反之是素数。
public class exp2{public static void main(String args[]){int i=0;math mymath = new math();for(i=2;i<=200;i++)if(mymath.iszhishu(i)==true)System.out.println(i);}}class math{public int f(int x){if(x==1 || x==2)return 1;elsereturn f(x-1)+f(x-2);}public boolean iszhishu(int x){for(int i=2;i<=x/2;i++)if (x % 2==0 )return false;return true;}}【程序3】题⽬:打印出所有的 “⽔仙花数 “,所谓 “⽔仙花数 “是指⼀个三位数,其各位数字⽴⽅和等于该数本⾝。
最大公约数与最小公倍数的计算两个整数的最大公约数(Greatest Common Divisor,简称GCD)指的是能够同时整除这两个数的最大正整数。
而最小公倍数(Least Common Multiple,简称LCM)则指的是能够同时被这两个数整除的最小正整数。
在数学和计算中,求解最大公约数和最小公倍数是一项基础且常用的运算。
1. 最大公约数的计算最大公约数可以通过辗转相除法来求解。
该方法基于以下定理:两个正整数a和b(a>b)的最大公约数等于a除以b的余数r和较小数b 之间的最大公约数。
具体求解步骤如下:(1)将a除以b,得到商q和余数r。
(2)若r等于0,则最大公约数为b。
(3)若r不等于0,则用b替换a,用r替换b,然后返回步骤(1)。
以下是一个求解最大公约数的例子:假设要求解45和75的最大公约数。
45 ÷ 75 = 0 (45)75 ÷ 45 = 1 (30)45 ÷ 30 = 1 (15)30 ÷ 15 = 2 0因此,45和75的最大公约数为15。
2. 最小公倍数的计算最小公倍数可以通过两个数的乘积除以它们的最大公约数来求解。
即最小公倍数等于(a*b)/GCD(a,b)。
以下是一个求解最小公倍数的例子:假设要求解6和9的最小公倍数。
首先,计算出它们的最大公约数:6 ÷ 9 = 0 (6)9 ÷ 6 = 1 (3)6 ÷ 3 = 2 0因此,6和9的最大公约数为3。
接下来,计算最小公倍数:LCM(6, 9) = (6 * 9) / GCD(6, 9) = 54 / 3 = 18因此,6和9的最小公倍数为18。
除了使用辗转相除法和相乘相除法,还可以使用质因数分解法求解最大公约数和最小公倍数。
质因数分解法通过将两个数分解为质数的乘积,然后求取它们的公共质数,并将这些公共质数相乘,得到最大公约数或最小公倍数。
综上所述,最大公约数和最小公倍数的计算可以通过辗转相除法、相乘相除法或质因数分解法等多种方法进行。
最大公约数与最小公倍数的求解最大公约数和最小公倍数是数学中常见的概念,用于求解整数之间的关系。
在实际应用中,经常需要计算两个或多个数的最大公约数和最小公倍数,这有助于我们解决一些实际问题,如分数化简、比例关系等。
本文将介绍最大公约数和最小公倍数的定义、求解方法以及示例应用。
一、最大公约数的定义和求解方法最大公约数,简称为“最大公约数”,是指两个或多个数最大的公共约数。
求解最大公约数的方法主要有以下几种:1.1 辗转相除法辗转相除法是求解最大公约数最常用的方法之一。
它的基本思想是通过多次用较大数除以较小数,不断得到余数,直到余数为0为止。
此时,较小数即为最大公约数。
例如,我们要求解28和14的最大公约数,按照辗转相除法进行计算:28 ÷ 14 = 2 余 0因此,最大公约数为14。
1.2 穷举法穷举法是一种较为简单直接的方法,适用于求解较小数的最大公约数。
具体操作是列举两个数的所有约数,然后找出它们的最大公约数。
例如,我们要求解15和25的最大公约数,可以列出它们的约数:15的约数为1、3、5、1525的约数为1、5、25最大公约数为5。
二、最小公倍数的定义和求解方法最小公倍数,简称为“最小公倍数”,是指两个或多个数的公共倍数中最小的一个。
求解最小公倍数的方法主要有以下几种:2.1 常用因数法常用因数法是一种常见且简便的方法。
具体步骤是先将两个数分解为质因数的乘积,然后列出所有的质因数并计算每个质因数的最高次数,最后将这些质因数的乘积即为最小公倍数。
例如,我们要求解15和25的最小公倍数,可以先将它们分解为质因数的乘积:15 = 3 × 525 = 5 × 5列出质因数,并计算最高次数:3 × 5 × 5 = 75因此,最小公倍数为75。
2.2 公式法公式法是一种求解最小公倍数的简单方法,适用于只有两个数的情况。
公式法的公式如下:最小公倍数 = 两数的乘积 ÷最大公约数例如,我们要求解16和24的最小公倍数,可以使用公式法:最小公倍数 = 16 × 24 ÷ 8 = 48因此,最小公倍数为48。