三 趣味整数

不重复的三位数

问题描述:0-9这10个数能组成多少不重复的三位数
代码运行结果:
在这里插入图片描述

代码如下:

public class Ch3_1 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub 
		int count=0;//计数器
		for(int i=100;i<=999;i++) {
			int a=i/100;//百位上的数
			int b=i/10%10;//十位上的数
			int c=i%10;//个位上的数
			if(a!=b&&a!=c&&b!=c) {
				count++;
			}
		}
		System.out.println("一共有"+count+"个不重复的三位整数");

	}

}

水仙花数

问题描述:水仙花数是指一个n位数(n>=3),它的每个位上的数字的n次幂之和等于他本身 。求100到999之间的水仙花数。

代码运行结果:
在这里插入图片描述

代码如下:

public class Ch3_2 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int a,b,c;
		for(int i=100;i<=999;i++) {
			a=i/100;
			b=i/10%10;
			c=i%10;
			if(a*a*a+b*b*b+c*c*c==i) {
				System.out.print(i+"是水仙花数\n");
			}
		}

	}

}

完全数

问题描述:完全数,又称完美数,是一些特殊的自然数。他所有的真因子(即除了它本身以外的约数)之和恰好等于他本身。例如6的约数为:1 2 3 6。除去它本身6外,其余三个数相加正好等于6。求10000以内的完全数。

程序运行结果如下:
在这里插入图片描述

程序代码如下:

public class Ch3_3 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int i,j,sum;
		for(i=2;i<=10000;i++) {
			sum=0;
			for(j=1;j<=i/2;j++) {
				if(i%j==0) {
					sum=sum+j;
				}
			}
			if(sum==i)
				print(i);
		}
	}
	public static void print(int n) {
		int j;
		System.out.print(n+"的约数(自身除外)为: ");
		for(j=1;j<=n/2;j++) {
			if(n%j==0) {
				System.out.print(j+" ");
			}
		}
		System.out.print("\n");

相亲数

问题描述:A的真因数之和为B,B的真因数之和为A。求100000以内的相亲数。
程序运行结果:
在这里插入图片描述

程序代码如下:

public class Ch3_4 {
	//求相亲数之和
	private  static int GetSum(int num) {
		int sum=1;//赋初始值
		int limit=(int) Math.sqrt(num);//num平方根
		for(int i=2;i<=limit;i++) {
			if(num%i==0)
				sum=sum+i+num/i;//num/i 的数值与i 的乘积等于 num
		}
		return sum;	
	}
	//判断两个相亲数是否相等
	public static void Run(int from,int to) {
		int count=0;
		for(int num =from; num<=to;num++) {
			int sum1= GetSum(num);
			if (sum1>num) {//避免重复
				int sum2=GetSum(sum1);
				if(sum2==num) {
					System.out.printf("%5d和%-5d是一对相亲数\n",sum1,sum2);
					count++;
				}
			}
			
		}
		System.out.println("在"+from+"到"+to+"中共有"+count+"对相亲数");
	}
	
	//调用方法
	public static void main(String[] args) {
		Run(2,100000);
		
	}

}

勾股数

求100之内的勾股数
思路:穷举法 a,b,c分别从在1-100之间进行寻找

运行结果如下:(部分结果图)
在这里插入图片描述

程序代码:

public class Ch3_6 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		GetGouGuShu(100);

	}
	public static void GetGouGuShu(int num) {
		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);
					}
				}
			}
		}
	}

}

自守数

如果某个数的平方的末尾几位数等于这个数,即为自守数。
如 2525=625,55=25;称5即为自守数。求10000以内的自守数。

运行结果如下:
在这里插入图片描述

程序代码如下:

public class Ch3_7 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		for(int i=1;i<=10000;i++) {
			zishoushu(i);
			
		}

	}
	public static void zishoushu(int n) {
		//把数字转换成字符串
		String str1=String.valueOf(n);
		//计算n的平方,并转换成字符串
		String str2=String.valueOf(n*n);
		//取n的平方字符串尾部与n等长的字符串,substring()截取字符串
		String str=str2.substring(str2.length()-str1.length());
		//如果字符串相等,则打印出来
		if(str.equals(str1)) {
			System.out.println(n+"是自守数");
		}
	}

}

3位反序数

顺序相反的数,成对出现即为反序数。如 102和201.
一个3位数各个数位上的数字均不同,他和他反序数的乘积为280021,这个三位应该是多少?

运行结果如下:
在这里插入图片描述

程序代码如下:

public class Ch3_8 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		System.out.println("要找的数如下:");
		for(int i=100;i<=999;i++) {
			FanXu(i);
		}

	}
	public static void FanXu(int n) {
		int i=n/100;//百位数
		int j=n%100/10;//十位数
		int k=n%10;//个位数
		int fx=k*100+j*10+i;
		if(n*fx==280021) {
			System.out.println(n);
		}
	}

}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章