首先说明,题目都是网上的,解这五十题的博客也很多。
为什么还要写出来,原因有二,一是这些题目基本是我自己复现的,于我而言有被记录的价值,二是我提供了结果、思路,有些题目还有多种方法,也许能在别人的基础上提供一些不同的思路。
总体而言这些题还是比较适合初学者的,能够加深对Java基本语法的理解,掌握一些经典的小题目,这些小题目看着简单,其实一些公司也会作为入职的笔试题,我就遇到过几次。
由于篇幅实在过长,当然可能是我书写习惯导致。本文分为两部分,这是上篇,包括1-25题。
下篇见:https://blog.csdn.net/sinat_28576553/article/details/117234796
具体包括:001-菲波拉契数列,002-素数的判断,003-水仙花数,004-分解质因数,005-条件运算符的嵌套,006-最大公约数和最小公倍数,007-字符统计,008-求s=a+aa+aaa+aaaa+aa...a,009-完数,010-球体下落路程和反弹高度,011-无重复数字三位数,012-企业发放的奖金,013-关于完全平方数,014-判断第几天,015-三数排序,016-9*9口诀,017-猴子吃桃问题,018-赛程搭配,019-图形打印,020-数列求和,021-多阶乘相加问题,022-递归方法求阶乘,023-递归求年龄,024-整数逆序输出,025-回文数的判断。
当然由于行笔匆忙,自然会有笔误、错误和不足之处,还望指正。
题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? “ 用对数(1对2对)来统计”,这是一个菲波拉契数列问题。
public class Practice001 {
public static void main(String[] args) {
System.out.println("第1个月的兔子对数是:1");
System.out.println("第1个月的兔子对数是:1");
int f1 = 1, f2 = 1, f3;
//注意i从3开始
for(int i = 3; i <= 20; i++ ) { //50突破了int的容量限制
f3 = f1 + f2;
f1 = f2;
f2 = f3;
System.out.println("第"+i+"个月的兔子对数是:"+f3);
}
}
// 第1个月的兔子对数是:1
// 第1个月的兔子对数是:1
// 第3个月的兔子对数是:2
// 第4个月的兔子对数是:3
// 第5个月的兔子对数是:5
// 第6个月的兔子对数是:8
// 第7个月的兔子对数是:13
// 第8个月的兔子对数是:21
// 第9个月的兔子对数是:34
// 第10个月的兔子对数是:55
// 第11个月的兔子对数是:89
// 第12个月的兔子对数是:144
// 第13个月的兔子对数是:233
// 第14个月的兔子对数是:377
// 第15个月的兔子对数是:610
// 第16个月的兔子对数是:987
// 第17个月的兔子对数是:1597
// 第18个月的兔子对数是:2584
// 第19个月的兔子对数是:4181
// 第20个月的兔子对数是:6765
}
题目:判断101-200之间有多少个素数,并输出所有素数。判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除,则表明此数不是素数,反之是素数。
注:什么是素数?素数是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数。
public class Practice002 {
public static void main(String[]args) {
int n = 100;
boolean temp = true; //标志
for(int i = 1; i <= 100; i++){ //外循环用来控制测试,100次就是101-200
n=n+1;
for(int j = 2; j <= Math.sqrt(n); j++) { //sqrt需要使用使用Math大类调用,不需要引入类。
if(n % j == 0) {
temp = false;
break;
}
} //内循环
if(temp == true) {
System.out.println("这个数是素数 "+n);
}
temp=true;
} //外循环
}//主方法
// 这个数是素数 101
// 这个数是素数 103
// 这个数是素数 107
// 这个数是素数 109
// 这个数是素数 113
// 这个数是素数 127
// 这个数是素数 131
// 这个数是素数 137
// 这个数是素数 139
// 这个数是素数 149
// 这个数是素数 151
// 这个数是素数 157
// 这个数是素数 163
// 这个数是素数 167
// 这个数是素数 173
// 这个数是素数 179
// 这个数是素数 181
// 这个数是素数 191
// 这个数是素数 193
// 这个数是素数 197
// 这个数是素数 199
}
题目:打印出所有的 "水仙花数 ",所谓 "水仙花数 "是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个 "水仙花数 ",因为153=1的三次方+5的三次方+3的三次方。
public class Practice003 {
public static void main(String[] args) {
int a,b,c,n,i;
//三位数就是100-999
for(n = 100; n < 1000; n++) {
//需要一个中间变量,来保存n
i = n;
a = i % 10; //求余,取出个位数
i = i / 10; //除,都是整数,就是整除,相当于剔除个位数
b = i % 10; //取出十位数
i = i / 10; //剔除十位数
c = i % 10; //取出百位数
// c = i / 10;
if(Math.pow(a, 3) + Math.pow(b, 3) + Math.pow(c, 3) == n) {
System.out.print(n+" ");
// 153 370 371 407
}
}
}
}
题目:对任意整数n分解质因数。
程序分析:对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成:
(1) 如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可。
(2) 如果n >k,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数n,重复执行第一步。
(3) 如果n不能被k整除,则用k+1作为k的值,重复执行第一步。
从某一合数中 找出质因数来 拿它除以质因数 再从分解过的合数中找出质因数来 再拿它除以质因数 一直到最后分解出质数来为止。
public class Practice004 {
public static void main(String[]args) {
Scanner it = new Scanner(System.in);
System.out.println("请输入你想要分解的