Java编程:完全数、亲密数、勾股数、自守数、输出菱形、矩阵最大值及其下标。

1.完全数

输出10000以内的完全数
完全数:一个数等于其因数(除其本身以外)之和,这个数则为完全数

public class WanQuanShu {
	public static void main(String[] args) {
		//输出10000以内的完全数
		//完全数:一个数等于其因数(除其本身以外)之和,这个数则为完全数
		
		for(int i=1;i<10000;i++){
			int sum=0;
			//将除这个数本身以外的因数累加
			for(int j=1;j<i;j++){
				if(i%j==0){
					sum+=j;
				}
			}
			//如果相等则说明这个数是完全数
			if(sum==i){
				System.out.println(i);
			}
		}
	}
}

运行结果

6
28
496
8128

2.亲密数

输出3000以内的所有亲密数
亲密数:若整数A的全部因数(除A外)之和等于B且整数B的全部因数(除B外)之和也等于A,则称A、B为亲密数。

public class QinMiShu {
	public static void main(String[] args) {
		//输出3000以内的所有亲密数
		//亲密数:若整数A的全部因数(除A外)之和等于B且
		//整数B的全部因数(除B外)之和也等于A,则称A、B为亲密数
		
		for(int i=1;i<3000;i++){
			int sum1=0;
			//先将除A本身以外的因数累加求出B
			for(int j=1;j<i;j++){
				if(i%j==0){
					sum1+=j;
				}
			}
			int sum2=0;
			//再将除B以外的因数累加
			for(int k=1;k<sum1;k++){
				if(sum1%k==0){
					sum2+=k;
				}
			}
			//判断求出的B的因数之和是否等于A
			//令i<sum1是防止多次输出同一对亲密数
			if(i==sum2&&i<sum1){
				System.out.println(i+"---"+sum1);
			}
		}
	}
}

运行结果

220---284
1184---1210
2620---2924

3.勾股数

输出某个范围内的勾股数

import java.util.Scanner;

public class GouGuShu {
	public static void main(String[] args) {
		//输出某个范围内的勾股数
		
		System.out.println("输入范围(1~?):");
		Scanner sc=new Scanner(System.in);
		//输入范围上限
		int num=sc.nextInt();
		//用于统计有多少组勾股数
		int count=0;
		//方法一
		for(int i=1;i<=num;i++){
			for(int j=i+1;j<=num;j++){
				for(int k=j+1;k<=num;k++){
					//符合勾股定理则输出,记录加一
					if(i*i+j*j==k*k){
						System.out.println(i+","+j+","+k);
						count++;
					}
				}
			}
		}
		System.out.printf("共有%d组\n",count);
		//用于统计有多少组勾股数
		int count1=0;
		//方法二
		for(int i=1;i<=num;i++){
			for(int j=i+1;j<=num;j++){
				int k=(int)(Math.sqrt(i*i+j*j));
				if(k*k==i*i+j*j&&k<=num){
					System.out.println(i+","+j+","+k);
					count1++;
				}
			}
		}
		System.out.printf("共有%d组\n",count1);
	}
}

运行结果

输入范围(1~?):
20
3,4,5
5,12,13
6,8,10
8,15,17
9,12,15
12,16,20
共有63,4,5
5,12,13
6,8,10
8,15,17
9,12,15
12,16,20
共有6

4.自守数

求100000以内的自守数
自守数:一个数的平方的尾数等于这个数。(例:25^2 = 625,76^2 = 5776)。

public class ZiShouShu {
	public static void main(String[] args) {
		//求100000以内的自守数
		//自守数:一个数的平方的尾数等于这个数。(例:25^2=625,76^2=5776)
		
		for(long i=0;i<100000;i++){
			long ii=i*i;
			//计算这个数有几位
			int wei=weiShu(i);
			//将这个数的平方对10的位数次方取余即是其尾数
			if(ii%Math.pow(10, wei)==i){
				System.out.println("自守数:"+i+","+"平方为:"+ii);
			}
		}
	}
	//用于判断一个数有几个数字
	public static int weiShu(long num){
		int count=0;
		while(num/10!=0){
			num/=10;
			count++;
		}
		return count+1;
	}
}

运行结果

自守数:0,平方为:0
自守数:1,平方为:1
自守数:5,平方为:25
自守数:6,平方为:36
自守数:25,平方为:625
自守数:76,平方为:5776
自守数:376,平方为:141376
自守数:625,平方为:390625
自守数:9376,平方为:87909376
自守数:90625,平方为:8212890625

5.输出菱形

输入一个行数(奇数),输出对应行数的菱形

import java.util.Scanner;

public class Diamond {
	public static void main(String[] args) {
		//输入一个行数(奇数),输出对应行数的菱形
		
		System.out.println("输入一个行数:");
		Scanner sc=new Scanner(System.in);
		//输入一个行数
		int h=sc.nextInt();
		//输出菱形的上半部分
		for(int i=1;i<=h/2+1;i++){
			for(int j=h/2-i;j>=0;j--){
				System.out.print(" ");
			}
			for(int k=1;k<=i;k++){
				System.out.print("* ");
			}
			System.out.println();
		}
		//输出菱形的下半部分
		for(int i=1;i<=h/2;i++){
			for(int j=1;j<=i;j++){
				System.out.print(" ");
			}
			for(int k=h/2-i+1;k>0;k--){
				System.out.print("* ");
			}
			System.out.println();
		}
	}
}

运行结果

输入一个行数:
7
   * 
  * * 
 * * * 
* * * * 
 * * * 
  * * 
   * 

6.矩阵最大值及其下标

获取矩阵最大值及其下标

import java.util.Scanner;

public class MatrixMaximum {
	public static void main(String[] args) {
		//获取矩阵最大值及其下标
		
		Scanner sc=new Scanner(System.in);
		System.out.println("输入矩阵行数、列数:");
		int h=sc.nextInt();
		int l=sc.nextInt();
		int[][] matrix=new int[h][l];
		//接收数字初始化矩阵
		for(int i=0;i<matrix.length;i++){
			System.out.printf("输入矩阵第%d行\n",(i+1));
			for(int j=0;j<matrix[i].length;j++){
				matrix[i][j]=sc.nextInt();
			}
		}
		System.out.println("--------");
		//将矩阵输出
		for(int[] i:matrix){
			for(int j:i){
				System.out.print(j+" ");
			}
			System.out.println();
		}
		System.out.println("--------");
		//找出矩阵中的最大值
		int max=matrix[0][0];
		for(int[] i:matrix){
			for(int j:i){
				if(max<j){
					max=j;
				}
			}
		}
		System.out.printf("矩阵最大值为%d\n",max);
		//用于记录有几个最大值
		int count=0;
		System.out.println("其下标为:");
		//找出矩阵中所有与最大值相同的元素并输出其下标
		for(int i=0;i<matrix.length;i++){
			for(int j=0;j<matrix[i].length;j++){
				if(max==matrix[i][j]){
					System.out.println((i+1)+","+(j+1));
					count++;
				}
			}
		}
		System.out.printf("共有%d个\n",count);
	}
}

运行结果

输入矩阵行数、列数:
3 4
输入矩阵第11 2 3 4
输入矩阵第22 3 4 1
输入矩阵第33 4 1 2
--------
1 2 3 4 
2 3 4 1 
3 4 1 2 
--------
矩阵最大值为4
其下标为:
1,4
2,3
3,2
共有3
  • 7
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值