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();
}
}