Java基础练习2018/3/7

这篇博客是作者初次尝试写作,主要内容涉及Java基础练习,包括判断数字是否为素数的方法,以及通过数学规律探讨兔子数列问题。作者提到在解决题目时的思考过程,如将素数范围限制到Math.sqrt(number)内。

头一次写博客,有点乱.....

zhepackage java50;
import java.util.*;
/* 
 * 古堡算式 
    福尔摩斯到某古堡探险,看到门上写着一个奇怪的算式: 
    ABCDE * ? = EDCBA 
    他对华生说:“ABCDE应该代表不同的数字,问号也代表某个数字!” 
    华生:“我猜也是!” 
    于是,两人沉默了好久,还是没有算出合适的结果来。 
    请你利用计算机的优势,找到破解的答案。 
    把 ABCDE 所代表的数字写出来。 
    答案写在“解答.txt”中,不要写在这里! 
 */ 
public class A1 {
		public static void main(String[] args)
		{
			
			for(int i=10000;i<=99999;i++)
			{
				int a=i/10000;
				int b=(i/1000)%10;
				int c=(i/100)%10;
				int d=(i%100)/10;
				int e=i%10;
				if(a==b||a==c||a==d||a==e||b==c||b==d||b==e||c==d||c==e||d==e) {continue;}
				int num=e*10000+d*1000+c*100+b*10+a;
				
			    if(i%num==0&&(i/num)<10)    System.out.println("ABCDE=:"+i+"*"+i/num+"="+num);
			}
		}
	}

这题刚开始做的时候忘了abcde是不同的字母,巧在直接判断取模是否为零,我第一次想的是直接带公式就很繁

package java50;
/*打印水仙花数,所谓水仙花数是一个三位数,其各位的数字立方和等于该数本身
 * (感觉大体思路就和前面的找素数差不多)*/
public class isNarcissisticNum {
      public static void main(String[] args)
      {
    	  for(int i=100;i<1000;i++) {
    		  if(isnarcissus(i))    System.out.println(i);
    	  }
    	  
      }
      public static boolean isnarcissus(int num) {
    	  int a=num/100;
    	  int b=(num%100)/10;
    	  int c=num%10;
    	  if(num==a*a*a+b*b*b+c*c*c)    return true;
    	  else return false;
      }
}

经典题啦,后面的找素数感觉也和水仙花差不多....素数范围可以缩小到Math.sqrt(number)

package java50;
/*判断101-200之间有多少个素数,并输出所有素数*/
public class isPrime {
    public static void main(String[] args)
    {  
    	for(int i=101;i<201;i++) {
    		if(isprime(i)) {System.out.println(i);}
    }
    }
    public static boolean isprime(int num) {
    	for(int j=2;j<Math.sqrt(num);j++)
    	{
    		if(num%j==0)  return false;
    	}
    	return true;
    }
}

找素数的拓展

package java50;
import java.util.*;
/*将一个正整数分解质因数,例如输入90,打印出90=2*3*3*5
 * (这题用到递归,需要一个isPrime函数判断是否为素数,和一个分解质因数的函数)*/
public class PrimePart {
       public static void main(String[] args)
       {
    	   Scanner in=new Scanner(System.in);
    	   System.out.println("请输入一个大于3的正整数:");
    	   int number=in.nextInt();
    	   System.out.println(number+"=");
    	   factor(number);
    	   
       }
       public static void factor(int num)
       {
    	   for(int i=2;i<Math.sqrt(num);i++)
    	   {
    		   if(num%i==0) System.out.println(i+"*");
    		   if(isPrime(num/i)) {
    			   System.out.println(num/i);
    		   }
    		   else
    			   factor(num/i);
    		   break;
    	   }
       }
       public static boolean isPrime(int num)
       {
    	   for(int j=2;j<Math.sqrt(num);j++)
    	   {
    		   if(num%j==0)   return false;
    	   }
    	   return true;
       }
}

找规律(兔子数)

package java50;
import java.util.*;
/*
 * 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,
 * 假如兔子都不死,问每个月的兔子对数为多少?
 * 观察规律发现an=an-1+an-2;(先看一对一对的兔子)
 * */
public class rabbit {
      public static void main(String[] args)
      {
    	  int[] array=new int[1000];
    	  array[0]=1;  array[1]=1;
    	  Scanner in=new Scanner(System.in);
    	  System.out.println("请输入第几个月");
    	  int month=in.nextInt();
    	  if(month==1||month==2)  System.out.println("有1对兔子");
    	  else  {
    		  for(int i=2;i<month;i++)
    		  {
    			  array[i]=array[i-1]+array[i-2];
    		  }
    		  System.out.println("一共有"+array[month-1]+"只兔子");
    	  }
      }
}





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值