5-1 找素数
(10分)
请编写程序,从键盘输入两个整数m,n,找出等于或大于m的前n个素数。
输入格式:
第一个整数为m,第二个整数为n;中间使用空格隔开。例如:
103 3
输出格式:
从小到大输出找到的等于或大于m的n个素数,每个一行。例如:
103
107
109
输入样例:
9223372036854775839 2
输出样例:
9223372036854775907
9223372036854775931
代码示例:
import java.math.BigInteger;
import java.util.Scanner;
public class Main{
public static void main(String[] args){
Scanner in=new Scanner(System.in);
String sc = in.next();
BigInteger m = new BigInteger(sc);
int n = in.nextInt();
int i=0;
while(i<n){
if(isPrime(m)){
System.out.println(m);
i++;
}
m=m.add(BigInteger.ONE);
}
}
public static boolean isPrime(BigInteger num) {
return num.isProbablePrime(50);
}
}
5-2 计算正五边形的面积和周长 (10分)
从下列的抽象类shape类扩展出一个正五边形(regular pentagon)类RPentagon,这个类将正五边形的边长作为私有成员,类中包含初始化这个值的构造方法。
public abstract class shape {// 抽象类
/ 抽象方法 求面积 / public abstract double getArea();
/ 抽象方法 求周长 / public abstract double getPerimeter(); }
请编程从键盘输入正五边形的边长值,创建一个正五边形对象,然后输出正五边形的面积和正五边形的周长。计算正五边形的面积公式为: S=5a^2/(4tan(36度))其中a为边长。 或者:S=(1/4)a^2√(25+10√5) 输出结果保留4位小数。
输入格式:
输入正五边形的边长。例如:
5
输出格式:
输出正五边形的面积和周长。第一行输出面积,第二行输出周长。例如: 43.0119
25
输入样例:
16.8
输出样例:
485.5875
84
代码示例:
import java.lang.Math;
import java.math.BigDecimal;
import java.text.DecimalFormat;
import java.util.Scanner;
public class Main {
public static void main(String[] args){
Scanner in=new Scanner(System.in);
double a=in.nextDouble();
Bian b1=new Bian(a);
DecimalFormat df1 = new DecimalFormat("#.####");
System.out.println(df1.format(b1.getArea()));
System.out.println(df1.format(b1.getPerimeter()));
}
}
abstract class shape{// 抽象类
public abstract double getArea();
public abstract double getPerimeter();
}
class Bian extends shape{
private double a;
public Bian(double a){
this.a=a;
}
public double getArea(){
double s=a*a/4*(Math.sqrt(25+10*Math.sqrt(5.0)));
return s;
}
public double getPerimeter(){
return a*5;
}
}
5-3 简单的计算器 (10分)
编程实现一个简单的计算器,实现两个整数的加、减、乘、除。 注意:输入的数字为整数,可能大于Long.MAX_VALUE (即: 9223372036854775807)
输入格式:
例如输入被除数和除数,除号是“/”:
199818221687230837883277970155607217447/15607605175531087007(除法运算)
输出格式:
12802618943776012921 (输出商)
输入样例:
268757455632088758902114193354244344883-187825044215992922193584201757800947591
输出样例:
80932411416095836708529991596443397292
提示:
一. 当字符串对象str存储的值为”199818221687230837883277970155607217447/15607605175531087007”时,下面的方法可以将str从除号”/”处分割成两个字符串:
String[] ob = str.split(“\D”, 0);
这时,ob[0]的值为”199818221687230837883277970155607217447”;
ob[1]的值为”15607605175531087007”.
二. 如果要检测字符串中是否包含除号’/’,可以用下面的方法检测:
(in1.indexOf(‘/’) != -1)为true,表示包含’/’。
代码示例:
import java.math.BigInteger;
import java.util.Scanner;
public class Main{
public static void main(String []args){
int len;
char symbol = 0;
Scanner input = new Scanner(System.in);
String string,formarString = null,laterString = null;
string = input.nextLine();
len = string.length();
for(int i =0 ;i<len ;i++)
{
if(string.charAt(i) == '+' || string.charAt(i) == '-' || string.charAt(i) =='*' || string.charAt(i) =='/')
{
symbol = string.charAt(i);
formarString = formar(string,i);
laterString = later(string,i+1);
}
}
BigInteger a = new BigInteger(formarString);
BigInteger b = new BigInteger(laterString);
System.out.println(mothed(a,b,symbol));
}
public static String formar(String s,int j){
String temp;
temp = s.substring(0,j);
return temp;
}
public static String later(String s,int j){
String temp;
temp = s.substring(j);
return temp;
}
public static BigInteger mothed(BigInteger a,BigInteger b,char symbol){
BigInteger result = null;
switch (symbol)
{
case '+':
result = a.add(b);break;
case '-':
result = a.subtract(b);break;
case '*':
result = a.multiply(b);break;
case '/':
result = a.divide(b);break;
}
return result;
}
}
5-4 求解给定字符串的前缀 (10分)
求解给定字符串的前缀。
输入格式:
输入数目不定的多对字符串,每行两个,以空格分开。 例如:
filename filepath
Tom Jack
输出格式:
返回两个字符串的最大前缀,例如:
The common prefix is file
No common prefix
输入样例:
filename filepath
Tom Jack
输出样例:
The common prefix is file
No common prefix
代码示例:
import java.util.ArrayList;
import java.util.Scanner;
public class Main{
public static void main(String[] args){
Scanner in=new Scanner(System.in);
String s1="";
String s2="";
while(in.hasNext()){
s1=in.nextLine();
System.out.println(isPre(s1));
}
in.close();
}
public static String isPre(String s1){
String result="";
String[] stringArr=s1.split(" ");
String s11=stringArr[0];
String s12=stringArr[1];
char[] ch1=s11.toCharArray();
char[] ch2=s12.toCharArray();
String list="";
int sl1=s11.length()<s12.length()?s11.length():s12.length();
for(int i=0;i<sl1;i++){
if(ch1[i]!=ch2[i]) break;
list+=ch1[i];
}
if(list=="") result+="No common prefix";
else result="The common prefix is "+list;
return result;
}
}
5-5 找出最大的对象 (10分)
(找出最大的对象)编写一个方法,返回对象数组中最大的对象。方法签名如下:
public static Object max(Comparable[] a)
所有对象都是Comparable接口的实例。对象在数组中的顺序是由compareTo方法决定的。
编写测试程序,从键盘输入5个字符串和5个整数,创建一个由5个字符串构成的数组、一个由5个整数构成的数组。找出数组中最大的字符串、整数并输出。
输入格式:
输入
Xi’an (输入5个字符串,每行一个)
Beijing
ShangHai
GuangZhou
ShenZhen
8 9 12 7 6 (输入5个整数,以空格分隔)
输出格式:
输出 Max string is Xi’an (输出最大的字符串)
Max integer is 12 (输出最大的整数)
输入样例:
France
Japan
German
China
India
6 34 89 168 53
输出样例:
Max string is Japan
Max integer is 168
代码示例:
import java.util.Arrays;
import java.util.Scanner;
public class Main {
public static Object max(Comparable[] a){
Arrays.sort(a);
return a[a.length-1];
}
public static void main(String[] args){
Scanner in=new Scanner(System.in);
String[] s1=new String[5];
Integer[] i1=new Integer[5];
int i=0;
while(i<5){
s1[i]=in.next();
i++;
}
int j=0;
while(j<5){
i1[j]=in.nextInt();
j++;
}
System.out.println("Max string is "+max(s1));
System.out.println("Max integer is "+max(i1));
in.close();
}
}
5-6 使用公历类GregorianCalendar (10分)
使用公历类 GregorianCalendar,公历类 GregorianCalendar有方法setTimeInMillis(long);可以用它来设置从1970年1月1日算起的一个特定时间。请编程从键盘输入一个长整型的值,然后输出对应的年、月和日。例如输入:1234567898765,输出:2009-1-14
输入格式:
输入
1234567898765 (毫秒数)
输出格式:
输出
2009-1-14 (输出年、月和日,实际应该是2月,因为Java API 从0开始计算月份)
输入样例:
1450921070108
输出样例:
2015-11-24
代码示例:
import java.util.Calendar;
import java.util.Date;
import java.util.Scanner;
public class Main {
public static void main(String[] args){
Calendar cal=Calendar.getInstance();
Scanner in = new Scanner(System.in);
long time = in.nextLong();
cal.setTimeInMillis(time);
int year=cal.get(Calendar.YEAR);
int month=cal.get(Calendar.MONTH);
int day=cal.get(Calendar.DAY_OF_MONTH);
System.out.println(year+"-"+month+"-"+day);
}
}