1.判断可逆素数
【问题描述】若将某一素数的各位数字的顺序颠倒后得到的数仍是素数,则此素数称为可逆素数。编写一个判断某数是否可逆素数的函数,在主函数中输入一个整数,再调用此函数进行判断
【输入形式】用户在第一行输入一个整数。
【输出形式】程序在下一行输出yes或是no,yes表示此数是可逆素数,no表示不是。用户输入的数必须为正整数。注意:yes或是no全是小写输出。
【样例输入】23
【样例输出】no
【样例说明】用户输入23,23各位数字颠倒之后得到32,23是素数,但32不是素数,所以23不是可逆素数。
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
if (panduan(n)) {
System.out.println("yes");
} else {
System.out.println("no");
}
}
public static boolean panduan(int n) {
int nishu = niyunsuan(n);
return qiu(n) && qiu(nishu);
}
private static int niyunsuan(int num) {
long rev = 0;
while (num > 0) {
rev = (rev * 10) + (num % 10);
num /= 10;
}
return (int) rev;
}//生成逆数
private static boolean qiu(long num) {
for (long i = 2; i <= Math.sqrt(num); i++) {
if (num % i == 0) {
return false;
}
}
return num > 1;
}//判断是否为素数
通过写好的静态方法输出逆数,再用同一种方法判断原数和逆数是否为素数,最后输出
2.日期类编写
【问题描述】先编写一个日期类,要求如下:
1)成员变量:year(表示年)、month(表示月)、day(表示日),类型均为int;
2)默认构造方法Date(),默认日期为2000年1月1日;
3)构造方法Date(int year,int month,int day);
4)编写计算任意两个日期之间相隔天数的方法int interval(Date d)。
然后编写测试类 输入两个日期,输出两个日期之间的间隔天数。
【输入形式】
2020 5 10
2020 5 20
【输出形式】
10
【样例输入】
2020 5 10 2020 5 20
【样例输出】
10
public class main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int y1 = scanner.nextInt();
int m1 = scanner.nextInt();
int d1 = scanner.nextInt();
int y2 = scanner.nextInt();
int m2 = scanner.nextInt();
int d2 = scanner.nextInt();
Data date1=new Data(y1,m1,d1);
Data date2=new Data(y2,m2,d2);
System.out.println(date1.jisuan(date2));
}
}
class Data{
private int year;
private int month;
private int day;
public Data(){
year = 2000;
month = 1;
day = 1;
}
public Data(int a, int b, int c){
this.year=a;
this.month=b;
this.day=c;
}
public int getYear() {
return this.year;
}
public int getMonth() {
return this.month;
}
public int getDay() {
return this.day;
}
public int jisuan(Data d){
boolean d1 = runnianjisuan(d.getYear());
boolean t1 = runnianjisuan(this.year);
return (d.getYear() - this.year) * 365 + dijitian(d.getMonth(),d.day,d1)-dijitian(this.getMonth(),this.getDay(),t1);
}
private static boolean runnianjisuan(int year) {
return (year % 4 == 0 && year % 100 != 0) || year % 400 == 0;
}
public static int dijitian(int mm, int dd, boolean runnianjisuan) {
int[] yuefen = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
if (runnianjisuan) {
yuefen[1] = 29;
}
int tianshu = 0;
for (int i = 0; i < mm - 1; i++) {
tianshu += yuefen[i];
}
tianshu += dd;
return tianshu;
}
}
根据年数相减可以直接计算年份差距的天数,然后通过调用方法可以计算较晚的日期当年的天数,相加即可得到差距天数
3.两村庄公用一口井
【问题描述】两个村庄共用一口井。编写一个Village类,该类有一个静态的double型成员变量waterAmount,用于模拟井水的水量。在主类Land的main方法中创建两个村庄,一个村庄“Zhang”,另一个为“Li”,每个村庄的人数可以在主类中设置,假设一个村庄中每个人的喝水量相同,试完成以下程序。
【输入形式】
第一行输入井水的水量,第二行输入村庄“Zhang”的人数和每个人的喝水量(浮点数),第三行输入村庄“Li”的人数和每个人的喝水量(浮点数);
【输出形式】
第一行输出井中初始的水量;
第二行输出村庄“Zhang”用水量和用完水后的井中水量;
第二行输出村庄“Li”用水量和用完水后的井中水量;
【样例输入】
1000 20 1.6 30 1.7
【样例输出】
1000.0 32.0 968.0 51.0 917.0
public class main {
public static void main(String args[])
{
Scanner sc = new Scanner(System.in);
Village.setWaterAmount(sc.nextDouble());
System.out.println(Village.getWaterAmount());
Village Zhang = new Village("Zhang",sc.nextInt());
Zhang.setDrinkAmount(sc.nextDouble());
Village Li = new Village("Li",sc.nextInt());
Li.setDrinkAmount(sc.nextDouble());
Zhang.drinkWater();
System.out.println(" " + Li.getWaterAmount());
Li.drinkWater();
System.out.println(" " + Zhang.getWaterAmount());
}
}
class Village {
private static double waterAmount;
public static double getWaterAmount() {
return waterAmount;
}
public static void setWaterAmount(double x) {
waterAmount = x;
}
private String n;
private int r;
private double drinkAmount;
public Village(String n, int r) {
this.n = n;
this.r = r;
}
public void setDrinkAmount(double x) {
this.drinkAmount = x;
}
public void drinkWater() {
double t = r * drinkAmount;
if (t >= waterAmount) {
t = waterAmount;
}
waterAmount -= t;
System.out.print(t);
}
}
同一种方法调用两遍,再输出即可,主要是类中方法的编写和定义