经典编程习题,用Java实现:矩阵转置、最大公约数和最小公倍数、计算自然对数的底e的值、输出1000以内的回文素数、判断两个年份之间的平闰年情况。

1.矩阵转置

public class MatTrans {
	public static void main(String[] args) {
		//矩阵转置
		
		int[][] arr={
				{0,0,0,0},
				{1,1,1,1},
				{2,2,2,2},
				{3,3,3,3},
		};
		System.out.println("转置前:");
		for(int i=0;i<arr.length;i++){
			for(int j=0;j<arr[i].length;j++){
				System.out.print(arr[i][j]+" ");
			}
			System.out.println();
		}
		System.out.println("-------");
		System.out.println("转置后:");
		for(int i=0;i<arr.length;i++){
			for(int j=0;j<arr[i].length;j++){
				System.out.print(arr[j][i]+" ");
			}
			System.out.println();
		}
	}
}

运行结果

转置前:
0 0 0 0 
1 1 1 1 
2 2 2 2 
3 3 3 3 
-------
转置后:
0 1 2 3 
0 1 2 3 
0 1 2 3 
0 1 2 3

2.最大公约数和最小公倍数

辗转相除法求最大公约数,最小公倍数为两数乘积除以最大公约数。

import java.util.Scanner;

public class Gcd_Lcm {
	public static void main(String[] args) {
		//辗转相除法求最大公约数
		//最小公倍数为两数乘积除以最大公约数
		
		System.out.println("enter two number:");
		//输入两个数
		Scanner sc=new Scanner(System.in);
		int x1=sc.nextInt();
		int x2=sc.nextInt();
		//将x1调整为较大的那个数
		if(x1<x2){
			int temp=x1;
			x1=x2;
			x2=temp;
		}
		//保存两数的乘积
		int x4=x1*x2;
		//辗转相除法
		int x3=x1%x2;
		while(x3!=0){
			x1=x2;
			x2=x3;
			x3=x1%x2;
		}
		//输出最大公约数
		System.out.println("gcl:"+x2);
		//输出最小公倍数
		System.out.println("lcm:"+(x4/x2));
	}
}

运行结果

enter two number:
10 15
gcl:5
lcm:30

3.计算自然对数的底e的值

计算自然对数的底e的值,公式:e=1+1/1!+1/2!+……+1/n!,要求精确到10^-10。

public class E {
	public static void main(String[] args) {
		//计算自然对数的底e的值
		//公式:e=1+1/1!+1/2!+……+1/n!
		//要求精确到10^-10
		
		//将e初始化
		double e=0;
		//用于计算公式中的阶乘
		double sum=1;
		int i=1;
		while(1/sum>1e-10){
			e+=1/sum;
			sum*=i++;
		}
		//输出Java中的标准e与计算结果对比
		System.out.println("E:"+Math.E);
		//输出计算结果
		System.out.printf("e:%.10f",e);
	}
}

运行结果

E:2.718281828459045
e:2.7182818284

4.输出1000以内的回文素数

输出1000以内的回文素数,回文数例如:11、22、121、363,素数:因数只有1和它本身。例如:2、3、5、7、11。

public class Huiwen_sushu {
	public static void main(String[] args) {
		//输出1000以内的回文素数
		//回文数例如:11、22、121、363
		//素数:因数只有1和它本身。例如:2、3、5、7、11
		
		for(int i=1;i<=1000;i++){
			//判断i是否为素数
			boolean pd1=suShu(i);
			//判断i是否为回文数
			boolean pd2=huiWen(i);
			//如果i满足条件则输出
			if(pd1&&pd2){
				System.out.println(i);
			}
		}
		
	}
	//定义判断一个数是否为素数的方法
	public static boolean suShu(int num){
		int sum=0;
		for(int i=1;i<=num;i++){
			//计算其因数的个数
			if(num%i==0){
				sum++;
			}
		}
		//如果有且只有两个因数则为素数
		if(sum==2){
			return true;
		}
		return false;
	}
	//定义判断一个数是否为回文数的方法
	public static boolean huiWen(int num){
		//如果这个数是两位数判断其个位和十位是否相等
		if(num<100){
			//取其个位
			int ge=num%10;
			//取其十位
			int shi=num/10;
			if(ge==shi){
				return true;
			}
		}
		//如果这个数是三位数判断其百位和个位是否相等
		if(num>99){
			//取其百位
			int bai=num/100;
			//取其个位
			int ge=num%10;
			if(bai==ge){
				return true;
			}
		}
		return false;
	}
}

运行结果

11
101
131
151
181
191
313
353
373
383
727
757
787
797
919
929

5.判断两个年份之间的平闰年情况

输出任意两个年份之间的闰年和平年,任意两个年份是指两个年份大小顺序随意。

import java.util.Scanner;

public class LeapYear {
	public static void main(String[] args) {
		//输出任意两个年份之间的闰年和平年
		//任意两个年份是指两个年份大小顺序随意
		
		Scanner sc=new Scanner(System.in);
		System.out.println("输入两个年份:");
		int x1=sc.nextInt();
		int x2=sc.nextInt();
		//区分哪个年份大哪个年份小
		int max=x1>x2?x1:x2;
		int min=x1<x2?x1:x2;
		//判断两个年份之间的所有年份并输出
		for(int i=min;i<=max;i++){
			if(runNian(i)){
				System.out.printf("%d是闰年\n",i);
			}else{
				System.out.printf("%d是平年\n",i);
			}
		}
	}
	//用于判断一个年份是否为闰年
	public static boolean runNian(int year){
		return (year%4==0&&year%100!=0||year%400==0);
	}
}

运行结果

输入两个年份:
2022 2010
2010是平年
2011是平年
2012是闰年
2013是平年
2014是平年
2015是平年
2016是闰年
2017是平年
2018是平年
2019是平年
2020是闰年
2021是平年
2022是平年
  • 6
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值