首页 > 代码库 > JAVA 水题

JAVA 水题

纯粹是让我来掌握熟练度的。


1.金蝉素数

某古寺的一块石碑上依稀刻有一些神秘的自然数。
专家研究发现:这些数是由1,3,5,7,9 这5 个奇数字排列组成的5 位素数,且同时去掉它的最高位与最低位数字后的三位数还是素数,同时去掉它的高二位与低二位数字后的一位数还是素数。因此,人们把这些神秘的素数称为金蝉素数,喻意金蝉脱壳之后仍为美丽的金蝉。

输出所有金蝉素数。

ANSWER:
13597 

53791

 79531

 91573 

95713

package test;

import java.util.Arrays;

public class test {
	static int n = 100000;
	static boolean isprimer[] = new boolean[n+10];
	

	public static void getprimer() {
		isprimer[0]=isprimer[1]=true;
		for (int i = 2; i * i <= n; i++) {
			if (!isprimer[i])
				for (int j = i; j * i <= n; j++) {
					isprimer[i * j] = true;
				}
		}
	}

	public static void main(String[] args) {
		getprimer();
		for(int i=10000;i<=99999;i++)
		{
			if(isprimer[i])
				continue;
			
			int a[]=new int[10];
			int x=i;
			for(int j=1;j<=5;j++)
			{
				
				a[j]=x%10;
				x/=10;
			}
			boolean ok=true;
			//数字不重复
			for(int j=1;j<=5;j++)			
			{		
				//奇数
				if(((a[j] & 1)==0) ) 
					ok=false;
				
				for(int k=j-1;k>=1;k--)
				{
					if(a[j]==a[k])
					{
						ok=false;
						break;
					}
				}			
				if(!ok)
					break;			
			}
									
			if(ok&& !isprimer[ a[4]*100+ a[3]*10+ a[2] ] && !isprimer[a[3]])				
				System.out.println(i);
			//System.out.println(i);
		}	
	}

}


2.回文素数

回文素数是一个既是素数又是回文数的整数。

输出不超过1000的回文素数。

ANSWER:

2
3
5
7
11
101
131
151
181
191
313
353
373
383
727
757
787
797
919
929

package test;

import java.util.Arrays;

public class test {
	static int n = 100000;
	static boolean isprimer[] = new boolean[n+10];
	

	public static void getprimer() {
		isprimer[0]=isprimer[1]=true;
		for (int i = 2; i * i <= n; i++) {
			if (!isprimer[i])
				for (int j = i; j * i <= n; j++) {
					isprimer[i * j] = true;
				}
		}
	}

	public static int length(int x)
	{
		int len=0;
		while(x!=0)
		{
			len++;
			x/=10;
		}
		return len;
	}
	
	public static void main(String[] args) {
		getprimer();
		for(int i=1;i<=1000;i++)
		{
			if(isprimer[i])
				continue;
			
			int a[]=new int[10];
			int  x=i;
			int len=length(i);
			for(int j=1;j<=len;j++)
			{
				
				a[j]=x%10;
				x/=10; 
			}
			boolean ok=true; 
			for(int j=1;j<=len;j++)			
			{					
				if(a[j]!=a[len-j+1])
				{
					ok=false;
					break;
				}
			}
			
			if(ok)					
				System.out.println(i);
			
		}	
	}

}


3.1~100素数的等差数列

主要练习ArrayList

package test;

import java.util.ArrayList;
import java.util.Arrays;

public class test {
	static int n = 100;
	static boolean isprimer[] = new boolean[n+10];
	static ArrayList primers = new ArrayList();
	
	public static void getprimer() {
		isprimer[0]=isprimer[1]=true;
		for (int i = 2; i * i <= n; i++) {
			if (!isprimer[i])
				for (int j = i; j * i <= n; j++) {
					isprimer[i * j] = true;
				}
		}
		
		for(int i=2;i<=n;i++)
		{
			if(!isprimer[i])
				primers.add(new Integer(i));
		}
		
		//for(int i=0;i<primers.size();i++)
		//	System.out.println(primers.get(i));
	}
	
	static ArrayList getlist()
	{
		ArrayList temp=null;
		ArrayList ans=new ArrayList();
		
		for(int i=0; i <primers.size();i++)
		{
			for(int j=i+1;j<primers.size();j++)
			{
				int a=((Integer)(primers.get(i))).intValue();
				int b=((Integer)(primers.get(j))).intValue();
				int diff=b-a;
				int c=b+diff;
				
				if(primers.contains(new Integer(c)))//if(!isprimer[c])			
				{
					temp=new ArrayList();
					//第1~3个数加入
					temp.add(new Integer(a));
					temp.add(new Integer(b)); 
					temp.add(new Integer(c));
					//查找后面有没有
					for(int k=c+diff;k<=n;k+=diff)
					{
						if(primers.contains(new Integer(k)))
						{
							temp.add(new Integer(k));		
						}
						else 
							break;
					}
					ans.add(temp);
				}
				
			}		
		}
		return ans;
	}
	
	public static void print(ArrayList ans)
	{
		for(int i=0;i<ans.size();i++)
		{
			ArrayList temp=(ArrayList) ans.get(i);
			for(int j=0;j<temp.size();j++){
				System.out.print(temp.get(j) + " ");
			}	
			int a=((Integer)(temp.get(1))).intValue();
			int b=((Integer)(temp.get(2))).intValue();
			System.out.println("diff = " +(b-a) + " ");
		}
		
		
	}
	public static void main(String[] args) {
		getprimer();		
				
		print(getlist());
	}

}

4.求s=a+aa+aaa+a……aa的值

其中a和len从键盘输入
如a=4 len=3
输出492

package test;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Scanner;

public class test {
	
	public static int getnum(int a,int i)
	{
		int res=0;
		while((i--)!=0)
		{
			res=res+(int)Math.pow(10,i)*a;
			
		}
		return res;
	}
			
	public static void main(String[] args) {
		int a;
		int len;
		Scanner in=new Scanner(System.in);
		System.out.println("please input num a");
		a=in.nextInt();
		len=in.nextInt();
		int sum=0;
		for(int i=1;i<=len;i++)
		{
			sum+=getnum(a,i);
		}
		System.out.println(sum);
	}

}

5.埃及分数式

分子是1的分数,叫单位分数。古代埃及人在进行分数运算时。只使用分子是1的分数。因此这种分数也叫做埃及分数,或者叫单分子分数。
随便输入一个真分数,要求分解为埃及分数。
如3/7=1/3+1/11+1/231
从原来的分数中分解出一个分母为b/a+1的埃及分数。直到分子能整除分母。

package test;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Scanner;

public class test {
						
	public static void main(String[] args)
	{
		System.out.println("please input number");
		String temp=null;
		Scanner in=new Scanner(System.in);
		temp=in.next();
		int index=temp.indexOf('/');
		int a=Integer.parseInt(temp.substring(0,index));
		int b=Integer.parseInt(temp.substring(index+1));
		while(b%a!=0)
		{
			int c=b/a+1;
			System.out.print("1/"+c+" + ");		
			a=a*c-b;
			b=b*c;
		}
		int c=b/a;
		System.out.println("1/"+c);				
	}

}