不重複的三位數
問題描述: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);
}
}
}