PAT编程【素数】【进制】

it2022-05-06  25

PAT编程 1. 令Pi表示第i个素数。现任给两个正整数M <= N <= 10000,请输出PM到PN的所有素数。

输入描述: 输入在一行中给出M和N,其间以空格分隔。

输出描述: 输出从PM到PN的所有素数,每10个数字占1行,其间以空格分隔,但行末不得有多余空格。

参考答案:

import java.util.Scanner; public class woker { public static void main(String[] args) { Scanner input = new Scanner(System.in); int minIndex = input.nextInt(); int maxIndex = input.nextInt(); int index = 0; int k = 0; for (int i = 1; i <= 999999; i++) { if (prime(i) == true) { index++; if (index >= minIndex && index <= maxIndex){ k++; if (k % 10 == 0) { System.out.print(i); System.out.println();//换行 }else if (index==maxIndex) { System.out.print(i); } else { System.out.print(i + " "); } } } } } public static boolean prime(int key) { if(key==1) return false; else { for (int i = 1; i <= Math.sqrt(key); i++) //如果a是合数,那么a的最小质因数一定不大于根号a. { if (key % i == 0 && i!=1) return false; } } return true; } }

我的答案:差不多

总结:如果a是合数,那么a的最小质因数一定不大于根号a. 2. 五河士道接到一张奇怪的字条:“我们约会吧! 3485djDkxh4hhGE 2984akDfkkkkggEdsb s&hgsfdk d&Hyscvnm”。大侦探很 快就明白了,字条上奇怪的乱码实际上就是约会的时间“星期四 14:04”,因为前面两字符串中第1对相同的大写英文字母(大小写有区分)是 第4个字母’D’,代表星期四;第2对相同的字符是’E’,那是第5个英文字母,代表一天里的第14个钟头(于是一天的0点到23点由数字0到9、 以及大写字母A到N表示);后面两字符串第1对相同的英文字母’s’出现在第4个位置(从0开始计数)上,代表第4分钟。现给定两对字符串, 请帮助福尔摩斯解码得到约会的时间。 输入描述: 输入在4行中分别给出4个非空、不包含空格、且长度不超过60的字符串。

输出描述: 在一行中输出约会的时间,格式为“DAY HH:MM”,其中“DAY”是某星期的3字符缩写,即MON表示星期一,TUE表示星期二,WED表示星期三,THU表示星期 四,FRI表示星期五,SAT表示星期六,SUN表示星期日。题目输入保证每个测试存在唯一解。

参考答案:

import java.util.Scanner; public class B1004HolmesDate { public static void main(String[] args) { Scanner sc = new Scanner(System.in); String s1 = sc.next(); String s2 = sc.next(); String s3 = sc.next(); String s4 = sc.next(); char[] chars1 = s1.toCharArray(); char[] chars2 = s2.toCharArray(); char[] chars3 = s3.toCharArray(); char[] chars4 = s4.toCharArray(); int length1 = s1.length(); int length2 = s3.length(); if (s1.length() > s2.length()) { length1 = s2.length(); } if (s3.length() > s4.length()) { length2 = s4.length(); } StringBuilder sb = new StringBuilder(); int temp = 0; for (int i = 0; i < length1; i++) { if (chars1[i] == chars2[i] && chars1[i] >= 'A' && chars1[i] <= 'G') { String day = getWeekDay(String.valueOf(chars1[i])); sb.append(day); sb.append(" "); temp = i; break; } } for (int i = temp + 1; i < length1; i++) { if (chars1[i] == chars2[i]) { if (chars1[i] >= 'A' && chars1[i] <= 'N') { int hour = chars1[i] - 'A' + 10; sb.append(hour); sb.append(":"); break; } if (chars1[i] >= '0' && chars1[i] <= '9') { sb.append("0"); sb.append(chars1[i]); sb.append(":"); break; } } } for (int i = 0; i < length2; i++) { if (chars3[i] == chars4[i] && ((chars3[i] >= 'A' && chars3[i] <= 'Z') || (chars3[i] >= 'a' && chars3[i] <= 'z'))) { int min = i; if (min < 10) { sb.append("0"); } sb.append(min); break; } } System.out.println(sb.toString()); } /** * MON表示星期一,TUE表示星期二,WED表示星期三,THU表示星期四, * FRI表示星期五,SAT表示星期六,SUN表示星期日 */ public static String getWeekDay(String week) { String weekDay = ""; switch (week) { case "A": weekDay = "MON"; break; case "B": weekDay = "TUE"; break; case "C": weekDay = "WED"; break; case "D": weekDay = "THU"; break; case "E": weekDay = "FRI"; break; case "F": weekDay = "SAT"; break; case "G": weekDay = "SUN"; break; } return weekDay; } }

我的答案:

import java.util.Scanner; public class Lyric { public static void main(String[] args) { String weekday =null; int HH = 0; int MM = 0; Scanner input_1 = new Scanner(System.in); Scanner input_2 = new Scanner(System.in); Scanner input_3 = new Scanner(System.in); Scanner input_4 = new Scanner(System.in); String[ ] a=new String[60]; String[ ] b=new String[60]; String[ ] c=new String[100]; String[ ] d=new String[100];//用于存放分解后的四行字符 String A = input_1.next(); String B = input_1.next(); String C = input_1.next(); String D = input_1.next();//输入四行字符串 a=A.split(""); b=B.split(""); c=C.split(""); d=D.split("");//拆分字符串为单个字符串 for(int k=0;k<c.length;k++){ if (c[k].equals(d[k])&&c[k].matches("[a-zA-Z]+")){ MM = k;break; } } // if (a.length>=b.length) for(int i=0;i<a.length;i++) { if(a[i].equals(b[i])){ switch (a[i]){ case "A": weekday="MON";break; case "B": weekday="TUE";break; case "C": weekday="WED";break; case "D": weekday="THU";break; case "E": weekday="FRI";break; case "F": weekday="SAT";break; case "G": weekday="SUN";break; default:continue; } for(int k=i+1;k<=a.length;k++) { if (a[k].equals(b[k])){ switch (a[k]){ case "0":HH=0;break; case "1":HH=1;break; case "2":HH=2;break; case "3":HH=3;break; case "4":HH=4;break; case "5":HH=5;break; case "6":HH=6;break; case "7":HH=7;break; case "8":HH=8;break; case "9":HH=9;break; case "A":HH=10;break; case "B":HH=11;break; case "C":HH=12;break; case "D":HH=13;break; case "E":HH=14;break; case "F":HH=15;break; case "G":HH=16;break; case "H":HH=17;break; case "I":HH=18;break; case "J":HH=19;break; case "K":HH=20;break; case "L":HH=21;break; case "M":HH=22;break; case "N":HH=23;break; default:continue; }break; } } if (HH<10){ if (MM<10){ System.out.println(weekday+" "+0+HH+":"+0+MM);break; }else { System.out.println(weekday+" "+0+HH+":"+MM);break; } }else { if (MM<10){ System.out.println(weekday+" "+HH+":"+0+MM);break; }else { System.out.println(weekday+" "+HH+":"+MM);break; } } } } } }

总结:

字符串的拆分: 1.函数.split("") 以括号内的字符为节点,将字符串分段(节点字符不会被返回)。若括号内为””则将字符串分割为单个字符的字符串(表现为单个字符,但类型依然为String) 2. toCharArray public char[] toCharArray() 将此字符串转换为一个新的字符数组。 返回: 一个新分配的字符数组,它的长度是此字符串的长度,它的内容被初始化为包含此字符串表示的字符序列。

范围判断【大小写字母】: 1.对字符char 形如 chars1[i] >= ‘A’ && chars1[i] <= 'Z’ 直接进行范围约束即可 2.对字符串string,使用.matches("[a-zA-Z]+")正则进行判断

if (a[i]==’\0’)可以判断字符型数组中char为空

题目描述 输入两个非负10进制整数A和B(<=230-1),输出A+B的D (1 < D <= 10)进制数。

输入描述: 输入在一行中依次给出3个整数A、B和D。

输出描述: 输出A+B的D进制数。

参考答案1:

import java.math.BigInteger; import java.util.Scanner; public class Main{ public static void main(String[] args) { // TODO Auto-generated method stub Scanner sc = new Scanner(System.in); BigInteger A = new BigInteger(sc.nextInt()+""); BigInteger B = new BigInteger(sc.nextInt()+""); BigInteger D = new BigInteger(sc.nextInt()+""); A = A.add(B); StringBuilder r = new StringBuilder(); while(A.divide(D) != BigInteger.ZERO){ r.append(A.remainder(D)); A = A.divide(D); } r.append(A.remainder(D)); r = r.reverse(); System.out.println(r.toString()); } }

参考答案2:

import java.util.Scanner; public class Main { public static void main(String[] args) { // TODO 自动生成的方法存根 Scanner sc=new Scanner(System.in); int a=sc.nextInt(); int b=sc.nextInt(); int d=sc.nextInt(); int c=a+b; String str=""; while(c>0){ int temp=c%d; str=temp+str; c=c/d; } System.out.print(str); } }

我的答案:

import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner input = new Scanner(System.in); int a = input.nextInt(); int b = input.nextInt(); int d = input.nextInt(); int c = a+b; String x = string10ToN(c,d); System.out.println(x); } public static String string10ToN(int tenRadix, int radix) { String code = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"; StringBuilder buf = new StringBuilder(); int remainder = 0; while (tenRadix != 0) { remainder = tenRadix % radix;// 求余数 tenRadix = tenRadix / radix;// 除以基数 buf.append(code.charAt(remainder));// 保存余数,记得要倒叙排列 } buf.reverse();// 倒叙排列 return buf.toString(); } }

最新回复(0)