题目列表
(1021) 查验身份证
Java实现
import java.util.Scanner;
/**
* @author waiter
* @version time: 2019/08/16
* PAT(1021)
*/
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int count = 0;
for(int i = 0; i < n; i++) {
String s = sc.next();
if(check(s)) {
count++;
}
else {
System.out.println(s);
}
}
if(count == n) {
System.out.println("All passed");
}
sc.close();
}
static boolean check(String s) {
int[] w = {7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2};
char[] c = s.toCharArray();
for(int i = 0; i < 17; i++) {
if(c[i] - '0' < 0 || c[i] - '9' > 0) {
return false;
}
}
int sum = 0;
for(int i = 0; i < 17; i++) {
sum += w[i] * (c[i] - '0');
}
int z = sum % 11;
if(caclM(z).equals(String.valueOf(c[17]))) {
return true;
}
else {
return false;
}
}
static String caclM(int z) {
if(z < 2) {
return String.valueOf(1 - z);
}
else if(z == 2) {
return "X";
}
else {
return String.valueOf(12 - z);
}
}
}
(1022) 挖掘机技术哪家强
Java实现
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
/**
* @author waiter
* @version time: 2019/08/16
* PAT(1022)
*/
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
List<School> schools = new ArrayList<School>();
for(int i = 0; i < n; i++) {
int id = sc.nextInt();
int score = sc.nextInt();
int index = containsId(schools, id);
if(index == -1) {
schools.add(new School(id, score));
}
else {
schools.get(index).score = schools.get(index).score + score;
}
}
sc.close();
int max = 0;
int maxId = 0;
for(School sch : schools) {
if(sch.score > max) {
max = sch.score;
maxId = sch.id;
}
}
System.out.println(maxId + " " + max);
}
static class School{
int id;
int score;
public School(int id, int score) {
this.id = id;
this.score = score;
}
}
static int containsId(List<School> schools, int id) {
for(int i = 0; i < schools.size(); i++) {
if(schools.get(i).id == id) {
return i;
}
}
return -1;
}
}
(1023) 旧键盘打字
Java实现
import java.util.LinkedHashSet;
import java.util.Scanner;
/**
* @author waiter
* @version time: 2019/08/16
* PAT(1023)
*/
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String s1 = sc.next();
String s2 = sc.next();
sc.close();
char[] c1 = s1.toCharArray();
LinkedHashSet<Character> set1 = new LinkedHashSet<Character>();
for(char c : c1) {
set1.add(c);
}
for(int i = 0; i < s2.length(); i++) {
char cur = s2.charAt(i);
if(set1.contains(cur)) {
continue;
}
else if(cur - 'A' >= 0 && 'Z' - cur >= 0) {
if(set1.contains('+')) {
continue;
}
else {
System.out.print(cur);
}
}
else if(cur - 'a' >= 0 && 'z' - cur >= 0) {
if(set1.contains(Character.toUpperCase(cur))) {
continue;
}
else {
System.out.print(cur);
}
}
else {
System.out.print(cur);
}
}
System.out.println();
}
}
(1024) 有理数四则运算
Java实现
import java.util.Scanner;
/**
* @author waiter
* @version time: 2019/08/17
* PAT(1024)
*/
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String s1 = sc.next();
String s2 = sc.next();
sc.close();
calc(s1, s2);
}
static void calc(String s1, String s2) {
String[] arr1 = s1.split("/");
String[] arr2 = s2.split("/");
int x1 = Integer.parseInt(arr1[0]);
int y1 = Integer.parseInt(arr1[1]);
int x2 = Integer.parseInt(arr2[0]);
int y2 = Integer.parseInt(arr2[1]);
int op1 = 1;
int op2 = 1;
if(x1 < 0) {
x1 = 0 - x1;
op1 = -1;
}
if(x2 < 0) {
x2 = 0 - x2;
op2 = -1;
}
int x = 0;
int y = 0;
x = x1 * op1 * minN(y1, y2) / y1 + x2 * op2 * minN(y1, y2) / y2;
y = minN(y1, y2);
String sum = transform(x1 *op1, y1) + " + " + transform(x2 * op2, y2) + " = " + transform(x, y);
System.out.println(sum);
x = x1 * op1 * minN(y1, y2) / y1 - x2 * op2 * minN(y1, y2) / y2;
String sub = transform(x1 *op1, y1) + " - " + transform(x2 * op2, y2) + " = " + transform(x, y);
System.out.println(sub);
x = x1 * op1 * x2 * op2;
y = y1 * y2;
String mul = transform(x1 *op1, y1) + " * " + transform(x2 * op2, y2) + " = " + transform(x, y);
System.out.println(mul);
if(x2 == 0) {
String div = transform(x1 *op1, y1) + " / " + transform(x2 * op2, y2) + " = " + "Inf";
System.out.println(div);
}
else {
x = x1 * op1 * y2;
y = x2 * op2 * y1;
int op = 1;
if(y < 0) {
y = 0 - y;
op = -1;
}
String div = transform(x1 *op1, y1) + " / " + transform(x2 * op2, y2) + " = " + transform(x * op, y);
System.out.println(div);
}
}
static String transform(int x, int y) {
if(x < 0) {
return "(-" + transform(0 - x, y) + ")";
}
else if(x == 0) {
return "0";
}
else if(x < y) {
if(maxN(x, y) == 1) {
return x + "/" + y;
}
else {
return x / maxN(x, y) + "/" + y / maxN(x, y);
}
}
else {
int a = x / y;
int r = x % y;
if(r != 0) {
if(maxN(r, y) == 1) {
return a + " " + r + "/" + y;
}
else {
return a + " " + r / maxN(r, y) + "/" + y / maxN(r, y);
}
}
else {
return a + "";
}
}
}
static int minN(int n1, int n2) {
int max = n1 > n2 ? n1 : n2;
int minN = max;
while(minN <= n1 * n2) {
if(minN % n1 == 0 && minN % n2 == 0) {
break;
}
else {
minN += max;
}
}
return minN;
}
static int maxN(int n1, int n2) {
int min = n1 < n2 ? n1 : n2;
while(min > 1) {
if(n1 % min == 0 && n2 % min == 0) {
break;
}
else {
min--;
}
}
return min;
}
}
(1025) 插入与归并
Java实现
import java.util.Arrays;
import java.util.Scanner;
/**
* @author waiter
* @version time: 2019/08/17
* PAT(1025)
*/
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int[] a = new int[n];
int[] b = new int[n];
for(int i = 0; i < n; i++) {
a[i] = sc.nextInt();
}
for(int i = 0; i < n; i++) {
b[i] = sc.nextInt();
}
sc.close();
boolean flag = true;
for(int i = 0; i < n - n % 2; i += 2) {
if(b[i] <= b[i + 1]) {
continue;
}
else {
flag = false;
break;
}
}
if(flag) {
System.out.println("Merge Sort");
int index = 2;
for(int i = 2; i <= n;) {
if(judge(b, 0, i) == true) {
i = i * 2;
}
else {
index = i / 2;
break;
}
}
int[] c = new int[n];
for(int i = 0; i < n; i++) {
c[i] = b[i];
}
for(int i = 0; i <= n - index * 2; i += index * 2) {
int[] temp = new int[index * 2];
for(int j = i, k = 0; j < i + index * 2; j++, k++) {
temp[k] = c[j];
}
Arrays.sort(temp);
for(int j = i, k = 0; j < i + index * 2; j++, k++) {
c[j] = temp[k];
}
}
for(int i = 0; i < n - 1; i++) {
System.out.print(c[i] + " ");
}
System.out.println(c[n - 1]);
}
else {
System.out.println("Insertion Sort");
int index = 2;
for(int i = index; i < n; i++) {
if(judge(b, 0, i) == true && judge(b, 0, i + 1) == false) {
index = i;
}
}
int[] d = new int[n];
for(int i = 0; i < n; i++) {
d[i] = b[i];
}
int[] temp = new int[index + 1];
for(int i = 0; i < index + 1; i++) {
temp[i] = d[i];
}
Arrays.sort(temp);
for(int i = 0; i < index + 1; i++) {
d[i] = temp[i];
}
for(int i = 0; i < n - 1; i++) {
System.out.print(d[i] + " ");
}
System.out.println(d[n - 1]);
}
}
static boolean judge(int[] a, int start, int end) {
for(int i = start; i < end - 1; i++) {
if(a[i] <= a[i + 1]) {
continue;
}
else {
return false;
}
}
return true;
}
}
(1026) 跟奥巴马一起编程
Java实现
import java.util.Scanner;
/**
* @author waiter
* @version time: 2019/08/18
* PAT(1026)
*/
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
String s = sc.next();
sc.close();
int lines = Math.round(n * 0.5f);
//the first line
for(int i = 0; i < n - 1; i++) {
System.out.print(s);
}
System.out.println(s);
//other
for(int i = 1; i < lines - 1; i++) {
System.out.print(s);
for(int j = 0; j < n - 2; j++) {
System.out.print(" ");
}
System.out.println(s);
}
//the last line
for(int i = 0; i < n - 1; i++) {
System.out.print(s);
}
System.out.println(s);
}
}
(1027) 在霍格沃茨找零钱
Java实现
import java.util.Scanner;
/**
* @author waiter
* @version time: 2019/08/18
* PAT(1027)
*/
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String str1 = sc.next();
String str2 = sc.next();
sc.close();
String[] a1 = str1.split("\\.");
String[] a2 = str2.split("\\.");
int g1 = Integer.parseInt(a1[0]);
int s1 = Integer.parseInt(a1[1]);
int k1 = Integer.parseInt(a1[2]);
int g2 = Integer.parseInt(a2[0]);
int s2 = Integer.parseInt(a2[1]);
int k2 = Integer.parseInt(a2[2]);
int sum1 = calcKnut(g1, s1, k1);
int sum2 = calcKnut(g2, s2, k2);
int change = sum2 - sum1;
if(change >= 0) {
formatKnut(change);
}
else {
System.out.print("-");
formatKnut(0 - change);
}
}
static int calcKnut(int g, int s, int k) {
int knut = k;
knut += s * 29;
knut += g * 17 * 29;
return knut;
}
static void formatKnut(int knut) {
int g = knut / (17 * 29);
int s = (knut % (17 * 29)) / 29;
int k = knut % 29;
System.out.println(g + "." + s + "." + k);
}
}
(1028) 统计同成绩学生
Java实现
import java.util.HashMap;
import java.util.Scanner;
/**
* @author waiter
* @version time: 2019/08/19
* PAT(1028)
*/
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
HashMap<Integer, Integer> map = new HashMap<Integer, Integer>();
for(int i = 0; i < n; i++) {
int score = sc.nextInt();
if(map.containsKey(score)) {
map.put(score, map.get(score) + 1);
}
else {
map.put(score, 1);
}
}
int k = sc.nextInt();
int[] a = new int[k];
for(int i = 0; i < k; i++) {
a[i] = sc.nextInt();
}
sc.close();
int[] b = new int[k];
for(int i = 0; i < k; i++) {
if(map.get(a[i]) != null) {
b[i] = map.get(a[i]);
}
else {
b[i] = 0;
}
}
for(int i = 0; i < k - 1; i++) {
System.out.print(b[i] + " ");
}
System.out.println(b[k - 1]);
}
}
(1029) 到底买不买
Java实现
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
/**
* @author waiter
* @version time: 2019/08/19
* PAT(1029)
*/
public class Main {
public static void main(String[] args) {
Scanner sc= new Scanner(System.in);
String s1 = sc.next();
String s2 = sc.next();
sc.close();
char[] chars = s1.toCharArray();
List<Character> list = new ArrayList<Character>();
for(int i = 0; i < chars.length; i++) {
list.add(chars[i]);
}
int lack = 0;
boolean flag = false;
for(int i = 0; i < s2.length(); i++) {
char c = s2.charAt(i);
if(list.contains(c)) {
list.remove(Character.valueOf(c));
}
else {
flag = true;
lack++;
}
}
if(flag) {
System.out.println("No " + lack);
}
else {
System.out.println("Yes " + list.size());
}
}
}
(1030) 有几个PAT
Java实现
import java.util.Scanner;
/**
* @author waiter
* @version time: 2019/08/19
* PAT(1030)
*/
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String str = sc.next();
sc.close();
int countP = 0;
int countPA = 0;
int countPAT = 0;
for(int i = 0; i < str.length(); i++) {
char c = str.charAt(i);
if(c == 'P') {
countP++;
}
else if(c == 'A') {
countPA += countP;
}
else if(c == 'T') {
countPAT += countPA;
countPAT = countPAT % 1000000007;
}
}
System.out.println(countPAT);
}
}