三 趣味整數

不重複的三位數

問題描述: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);
		}
	}

}

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