提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
本文章主要是一些初学者编程算法题,由Java进行编译实现。
1、打印1000-2000年的闰年
普通闰年:公历年份是4的倍数且不是100的倍数为普通闰年(如2004、2020年就是闰年)。
世纪闰年:公历年份是整百数的,必须是400的倍数才是世界闰年(如2000是世纪闰年,1900不是世纪闰年)。
代码展示:
public static void main(String[] args) {
int i = 0;
for(i=1000;i<=2000;i++){
if (i%100!=0 && i%4==0 || i%400==0){ //闰年分为普通闰年和世纪闰年,两者满足其一即时闰年。
System.out.print(i+" "); //普通闰年能被4整除但不能被100整除
} //世纪闰年能被400整除
}
}
运行结果:
2、判断是否为素数
素数,也称为质数,指在大于1的自然数中,除了1和该数自身外,无法被其他自然数整除的数。
代码展示:
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int num = scanner.nextInt();
boolean flag = true; //boolean(布尔型),它的取值只能是常量 true 或 false这两个值中的一个。
for (int i=2;i < num;i++){ //for循环实现从 2 到 num-1 的数字能否整除num,如果能,num就不是素数,反之。
if (num % i == 0){
flag = false;
break;
}
}
if (flag==true){ //可以省略==true,在java中if中的判断只有true和false。
System.out.println(num+" 是素数");
} else{
System.out.println(num+" 不是素数");
}
}
运行结果:
3、打印1-100之间的素数
代码展示:
public static void main(String[] args) {
int i = 0;
for (i = 1;i <= 100;i++){ //第一个for循环实现1-100的数字
boolean flag = true;
int j = 0;
for (j = 2;j <= i-1;j++){ //第二个for循环实现从2到i-1的数字能否整除i,如果能,就不是素数,反之。
if (i % j == 0){
flag = false;
break;
}
}
if (flag==true){
System.out.print(i+" ");
}
}
}
运行结果:
4、水仙花数
“水仙花数”是指一个三位数,其各位数字的立方和确好等于该数本身,如;153=1+125+27=153,则153是一个“水仙花数“。
代码展示:
public static void main(String[] args) {
for (int i = 100; i < 1000; i++) { //“水仙花数”是一个三位数,所以i从100开始。
int a = i % 10; //取出个位上的数
int b = (i / 10) % 10; //取出十位上的数
int c = i / 100; //取出百位上的数
int pd = a * a * a + b * b * b + c * c * c;
if (pd == i) {
System.out.println(i);
}
}
}
运行结果:
5、最大公约数
最大公约数(Greatest Common Divisor(GCD)),也称最大公因数、最大公因子,是一种数学概念,指两个或多个整数共有约数中最大的一个。
最大公约数的求解方法有质因数分解法、短除法、辗转相除法、更相减损法等。
下面分别使用辗转相除法、更相减损数、穷举法来求解最大公约数。
1.辗转相除法
有两整数a和b:
① a%b得余数c
② 若c=0,则b即为两数的最大公约数
③ 若c≠0,则a=b,b=c,再回去执行①
例如求27和15的最大公约数过程为:
27÷15 余12,15÷12余3,12÷3余0因此,3即为最大公约数
代码展示:
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int a = scanner.nextInt();
int b = scanner.nextInt();
int c = 0;
while (a%b !=0){
c = a % b;
a = b;
b = c;
}
System.out.println(b);
}
运行结果:
2.更相减损数
有两整数a和b:
① 若a>b,则a=a-b
② 若a<b,则b=b-a
③ 若a=b,则a(或b)即为两数的最大公约数
④ 若a≠b,则再回去执行①
代码展示:
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int a = scanner.nextInt();
int b = scanner.nextInt();
while (a != b) {
if (a > b) {
a = a - b;
} else if (a < b) {
b = b - a;
}
}
System.out.println(a);
}
运行结果:
3.穷举法
有两整数a和b:
① i=1
② 若a,b能同时被i整除,则gcd=i
③ i++
④ 若 i <= a(或b),则再回去执行②
⑤ 若 i > a(或b),则t即为最大公约数,结束
代码展示:
public class Chen {
public static void main(String[] args) {
Scanner sacnner = new Scanner(System.in);
int a = sacnner.nextInt(); //输入两个整数
int b = sacnner.nextInt();
int i = 0;
int gcd = 0;
for (i = 1;i <= a && i <= b;i++){ //通过for循环判断 i 是否为最大公约数
if (a%i == 0 && b%i == 0){ //如果i能同时被a和b整除,则说明i也最大公约数
gcd = i;
}
}
System.out.println(gcd);
}
运行结果:
6、最小公倍数
最小公倍数与最大公约数的乘积等于那两个数的乘积,所以最小公倍数等于那两个数的的乘积除以最大公约数。
因此求解最小公倍数的问题就变得很简单了。下面是我用辗转相除法来求解的。
代码展示:
public class Chen {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int a = scanner.nextInt();
int b = scanner.nextInt();
int r = 0;
int c = a * b;
while (a%b !=0){
r = a % b;
a = b;
b = r;
}
System.out.println(c/b);
}
运行结果:
7、年龄打印
根据输入的年龄, 来打印出当前年龄的人是少年(低于18), 青年(19-28), 中年(29-55), 老年(56以上)
代码展示:
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int age = scanner.nextInt();
if (age > 0 && age <= 18){
System.out.println("少年");
} else if(age >= 19 && age <= 28){
System.out.println("青年");
} else if(age >= 29 && age <= 55) {
System.out.println("中年");
} else{
System.out.println("老年");
}
}
运行结果:
8、模拟密码登录
编写代码模拟三次密码输入的场景。 最多能输入三次密码,密码正确,提示“登录成功”,密码错误, 可以重新输 入,最多输入三次。三次均错,则提示退出程序
代码展示:
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int i = 0;
System.out.println("请输入密码");
while (i<3) { //while循环确定次数
String a = scanner.nextLine();
if (a.equals("123456789")) { //equals用来检测两个对象是否相等,即两个对象的内容是否相等,
System.out.println("输入正确"); //相同返回true,不同返回false。
break;
} else {
System.out.println("输入错误,请重新输入");
i++;
}
}
if (i==3){
System.out.println("密码多次错误,24h已锁定");
}
运行结果:
总结
本篇一共8道编程题,虽然难度不大,但是对基础的打牢有一定的帮助,让我们一起携手走向Java的世界,与君共勉。