文章目录
- 前言
- 1.古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子对数为多少?
- 2.判断101-200之间有多少个素数,并输出所有素数。
- 3.打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个"水仙花数",因为153=1的三次方+5的三次方+3的三次方。
- 4.将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。
- 5.学习成绩>=90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示。
- 6.输入两个正整数m和n,求其最大公约数和最小公倍数。
- 7.输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。
- 8.求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),几个数相加有键盘控制。
- 9.一个数如果恰好等于它的因子之和,这个数就称为"完数"。例如6=1+2+3.编程找出1000以内的所有完数。
- 10.一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高?
- 总结
前言
因为最近在练习Java编程,看了一个写有50道题的大体量作业,想练练手,而且我看这50道题是五、六年前的了(我不太清楚csdn里有没有很新的答题方法,没有仔细搜),其给的答案我看着有点复杂(可能是太多了,我不想认真看),我就想着用最近所学的重新写一遍看看。
如果我写的程序有什么漏洞的话,请大家务必指出,我自己看自己的程序肯定是看不出什么名堂来的(除非它是飘红了)。
下面我给的代码都是我自己编写(当然不排除有些题想不出来,去网上找的),并在idea上运行一遍了,可以出结果的,并配有详细注释(就算现在没有,之后也会加上的)。
个人感觉写注释还是蛮好的,可以加强个人理解。(注释是给小白看的,如果真的想要更好的理解代码,建议先自己看代码,实在是理解不了再看注释)
因为题目很多,有的和我之前做的重复了,不过还是放这了,同一道题,过几天再写,感触也有所不同。
废话有点多,下面正式开始。
1.古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子对数为多少?
程序分析:
第一个月1对
第二个月1对
第三个月 2 对(1+1)
第四个月 3 对(2+1)
第五个月 5 对(3+2)
第六个月 8 对(5+3)
相信到这里,大家就可以看出来了,实际上不用管什么时候兔子开始生啊,每个月有几对兔子生,
这就是一道找规律的数学题而已,不要把自己搞懵了。
这个月的兔子数 = 上个月的兔子数 + 上上个月的兔子数*/
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24import java.util.Scanner; public class The01 { public static void main(String[] args){ //Scanner类获取输入固定用法 Scanner sc = new Scanner(System.in); Scanner sc = new Scanner(System.in); //输入月份 System.out.println("请输入查询的月份"); int n = sc.nextInt(); System.out.println("第"+n+"月份有"+rabbit(n)+"对兔子"); } static int rabbit(int n){ //这里n为形参,n为a,c,d之类的都行,记得如果改的话,下面的也要改 //如果是第一个月或是第二个月 if(n==1 || n==2) { //返回值1:就一对 return 1; }else { //不是的话执行如下 返回上个月的加上上上个月的 return rabbit(n-1)+rabbit(n-2); } } }
2.判断101-200之间有多少个素数,并输出所有素数。
程序分析:
像这样的判断一个数到一个数之间的这样类型的题,首先想到用“for循环”来写,因为for循环可以直接遍历出来。(如果不知道for循环是怎么循环的,可以看我之前写的文章,也可以上网搜)
素数:素数一般指质数。质数是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数。
这里用该数除以另外一个数,如果能够整除,说明该数不是素数。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23public class The02 { public static void main(String[] args){ //循环遍历 for(int i=101;i<=200;i++){ //参数m,记录该数有多少个能够被整除的数 int m = 0; //遍历被除数,从2开始,1不算(懂的都懂) //这里从1开始,也行,不过下面的if语句就是m=1了 for (int j=2;j<i;j++){ //能够整除,m+1 if(i%j==0){ m++; } } //素数是指一个能被整除的都不能有 if(m==0){ //输出素数 System.out.println(i); } } } }
3.打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个"水仙花数",因为153=1的三次方+5的三次方+3的三次方。
程序分析:
打印出所有的水仙花数,就是要遍历了,不然一个个的太麻烦
上面说水仙花数是一个三位数,就给定了范围100~999
上面又说到三次方,利用Math函数里的pow()方法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21public class The03 { public static void main(String[] args){ //遍历,注意是<1000,实际上就是<=999,因为是int类型,整数 for(int i=100;i<1000;i++){ // ‘/’除以,‘%’除以取余数,例如:5%2=1,5除以2余数1 int a = i/100; //取百位数字 int b = i/10%10; //取十位数字 int c = i%10; //取各位数字 //Math.pow(m,n)是指m的n次方。Math.pow(a,3)是指a的3次方 //如果i(一个数)=其百位数的3次方+十位数的3次方+个位数的3次方 if(i==Math.pow(a,3)+Math.pow(b,3)+Math.pow(c,3)){ //输出水仙花数 System.out.println(i); } } } }
4.将一个正整数分解质因数。例如:输入90,打印出90=233*5。
程序分析:
找一个数的因数也可以用for循环,从2遍历到他自身(保证找全)
如何找因数,是用该数90除以遍历的数2~90来算的,
如何找质因数。
如果90除以2得45
45再除以2,除不尽,除3(2+1)得15
再将15除以2,除不尽,除3(2+1)得5
5再继续除2,除3,除4…
这就是找质因数的方法,上面那个5其实就不用除了,只是举例。
可以看出上是一个循环,90除2得45后,是用45 继续往下走的。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28import java.util.Scanner; public class The04 { public static void main(String[] args){ Scanner sc = new Scanner(System.in); System.out.println("请输入一个正整数:"); //输入 int n = sc.nextInt(); System.out.print(n+"="); //循环遍历2到n自身看是否有除尽的 //下面()里的数字只是举例而已 for(int i=2;i<=n;i++){ //运用while循环 //除尽了,且除数n(90)与被除数i(2)不相等 while (n%i==0&&n!=i){ //现在n变为了45 n = n/i; //输出质因数 System.out.print(i+"*"); } //除数和被除数相等,就是到了上面说到的变成5了,没得除了,就结束 if(n==i){ System.out.println(i); break; } } } }
5.学习成绩>=90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示。
程序分析:
直接看代码吧,就是简单的if else用法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20import java.util.Scanner; public class The05 { public static void main(String[] args){ Scanner sc = new Scanner(System.in); System.out.println("请输入成绩"); int n = sc.nextInt(); if(n>=0 && n<=100){ if(n>=90){ System.out.println("A"); }else if(n>=60){ System.out.println("B"); }else{ System.out.println("C"); } }else { System.out.println("输入有误!"); } } }
6.输入两个正整数m和n,求其最大公约数和最小公倍数。
程序分析:
利用辗除法。
/* 辗转相除法
辗转相除法:辗转相除法是求两个自然数的最大公约数的一种方法,也叫欧几里德算法。
例如,求(319,377):
∵ 319÷377=0(余319)
∴(319,377)=(377,319);
∵ 377÷319=1(余58)
∴(377,319)=(319,58);
∵ 319÷58=5(余29)
∴ (319,58)=(58,29);
∵ 58÷29=2(余0)
∴ (58,29)= 29;
∴ (319,377)=29。
可以写成右边的格式。
用辗转相除法求几个数的最大公约数,可以先求出其中任意两个数的最大公约数,再求这个最大公约数与
第三个数的最大公约数,依次求下去,直到最后一个数为止。最后所得的那个最大公约数,就是所有这些
数的最大公约数。*/
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30import java.util.Scanner; public class The06 { public static void main(String[] args){ Scanner sc = new Scanner(System.in); System.out.println("请输入第一个整数:"); int m = sc.nextInt(); System.out.println("请输入第二个整数:"); int n = sc.nextInt(); System.out.println(m+"和"+n+"的最大公约数为:"+Max(m,n)); System.out.println(m+"和"+n+"的最小公倍数为:"+Min(m,n)); } //求最大公约数,用辗转相除法 static int Max(int m,int n){ while (m%n!=0){ int temp = m%n; m = n; n = temp; if(m%n==0){ return n; } } return 0; } //求最小公倍数的方法 //两个数最小公倍数乘以最大公约数就等于他们两个数相乘 static int Min(int m,int n){ return m*n/Max(m,n); } }
7.输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。
程序分析:
可以通过ASCII码来判断字符是英文字母、空格、数字还是什么
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35import java.util.Scanner; public class The07 { public static void main(String[] args){ Scanner sc = new Scanner(System.in); System.out.println("请输入字符串"); //获取字符串 String str = sc.nextLine(); //将获取的字符串赋值给数组变量arr char[] arr = str.toCharArray(); //初始化,x,y,z,m,分别表示英文字母数,数字数,其他字符数和空格数 int x=0,y=0,z=0,m=0; //遍历数组中的值 for(int i=0;i<arr.length;i++){ int n = arr[i]; //英文字母对应的ASCII码范围,以下同 if((n>=65&&n<=90)||(n>=97&&n<=122)){ x++; //空格 }else if(n==32){ m++; //数字 }else if(n>=48&&n<=57){ y++; //其他字符 }else { z++; } } System.out.println("输入的字母个数:"+x); System.out.println("输入的数字个数:"+y); System.out.println("输入的空格个数:"+m); System.out.println("输入的其它字符个数:"+z); } }
8.求s=a+aa+aaa+aaaa+aa…a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),几个数相加有键盘控制。
程序分析:
S就是5个a+4个10倍a+3个100倍a+2个1000倍a+1个10000倍a
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17import java.util.Scanner; public class The08 { public static void main(String[] args){ Scanner sc = new Scanner(System.in); System.out.println("请输入n的值:"); //输入 int n = sc.nextInt(); //输入的数是正整数 if(n>0&&n<10){ int s = 5*n+4*n*10+3*n*100+2*n*1000+n*10000; System.out.println("s的值为:"+s); }else { System.out.println("输入的有误!"); } } }
9.一个数如果恰好等于它的因子之和,这个数就称为"完数"。例如6=1+2+3.编程找出1000以内的所有完数。
程序分析:
又是找多少以内的数,遍历for循环
求因数,也是遍历,for循环
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21public class The09 { public static void main(String[] args){ //遍历1到1000的所有数 for(int i=1;i<=1000;i++){ //初始化sum,sum作为后面判断完数的依据 int sum = 0; //遍历因数 for(int j=1;j<i;j++){ if(i%j==0){ sum +=j; } } //如果满足题目条件 if(sum==i){ //输出 System.out.println(i); } } } }
10.一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高?
程序分析:
从第一次到第十次,遍历,for循环
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21public class The10 { public static void main(String[] args){ //初始化参数 double s = 0,t = 0; int sum = 0; //遍历1到10次 for(int i=1;i<=10;i++){ //s,单次落下经过多少米。s=100/2的(i-1)次方 s = 100/Math.pow(2,i-1); System.out.println("第"+i+"次下落经过"+s+"米"); //t,反弹多少米。t=100/2^i(2的i次方) t = 100/Math.pow(2,i); //输出反弹值 System.out.println("第"+i+"反弹"+t+"米"); sum +=s; } //输出总值 System.out.println("第10次落地时共经过"+sum+"米"); } }
总结
提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。
最后
以上就是魁梧乌龟最近收集整理的关于50道Java基础编程题(一)——新解2021(配有超详细注释)(1到10题)前言总结的全部内容,更多相关50道Java基础编程题(一)——新解2021(配有超详细注释)(1到10题)前言总结内容请搜索靠谱客的其他文章。
发表评论 取消回复