PTA

本页面旨在记录解题思路

L1-007 念数字

输入一个整数,输出每个数字对应的拼音。当整数为负数时,先输出fu字。十个数字对应的拼音如下:

1
2
3
4
5
6
7
8
9
10
0: ling
1: yi
2: er
3: san
4: si
5: wu
6: liu
7: qi
8: ba
9: jiu
输入格式:

输入在一行中给出一个整数,如:1234

提示:整数包括负数、零和正数。

输出格式:

在一行中输出这个整数对应的拼音,每个数字的拼音之间用空格分开,行末没有最后的空格。如
yi er san si

输入样例:
1
-600
输出样例:
1
fu liu ling ling

思路一:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
import java.util.*;

public class ReadNumber {
public static void main(String[] args){
Scanner sca = new Scanner(System.in);
String num = sca.next();
char c [] = num.toCharArray();
HashMap map1 = new HashMap();
for(int i =0;i<c.length;i++) {
switch (c[i]) {
case '0': {
map1.put(i, "ling");
}
break;
case '1': {
map1.put(i, "yi");
}
break;
case '2': {
map1.put(i, "er");
}
break;
case '3': {
map1.put(i, "san");
}
break;
case '4': {
map1.put(i, "si");
}
break;
case '5': {
map1.put(i, "wu");
}
break;
case '6': {
map1.put(i, "liu");
}
break;
case '7': {
map1.put(i, "qi");
}
break;
case '8': {
map1.put(i, "ba");
}
break;
case '9': {
map1.put(i, "jiu");
}
break;
default:
break;
}
}
Set keySet = map1.keySet();
Iterator it = keySet.iterator();
if(num.charAt(0)=='-'){
System.out.print("fu ");
}
String r = "";
while(it.hasNext()){
Object key = it.next();
Object value = map1.get(key);
r = r+value+" ";
}
System.out.println(r.trim());
}
}

思路二:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
import java.util.*;

public class ReadNumber {
public static void main(String[] args){
Scanner sca = new Scanner(System.in);
String num = sca.next();
char c [] = num.toCharArray();
HashMap map = new HashMap();
HashMap map1 = new HashMap();
map.put(0,"ling");
map.put(1,"yi");
map.put(2,"er");
map.put(3,"san");
map.put(4,"si");
map.put(5,"wu");
map.put(6,"liu");
map.put(7,"qi");
map.put(8,"ba");
map.put(9,"jiu");
for(int i = 0;i<c.length;i++){
for(int j = 0;j<10;j++){
if(c[i]==j+'0'){
map1.put(i,map.get(j));
}
}
}
Set keySet = map1.keySet();
Iterator it = keySet.iterator();
if(num.charAt(0)=='-'){
System.out.print("fu ");
}
String r = "";
while(it.hasNext()){
Object key = it.next();
Object value = map1.get(key);
r = r+value+" ";
}
System.out.println(r.trim());
}
}

L1-009 N个数求和

分数 20

全屏浏览切换布局

作者 陈越

单位 浙江大学

本题的要求很简单,就是求N个数字的和。麻烦的是,这些数字是以有理数分子/分母的形式给出的,你输出的和也必须是有理数的形式。

输入格式:

输入第一行给出一个正整数N(≤100)。随后一行按格式a1/b1 a2/b2 ...给出N个有理数。题目保证所有分子和分母都在长整型范围内。另外,负数的符号一定出现在分子前面。

输出格式:

输出上述数字和的最简形式 —— 即将结果写成整数部分 分数部分,其中分数部分写成分子/分母,要求分子小于分母,且它们没有公因子。如果结果的整数部分为0,则只输出分数部分。

输入样例1:
1
2
5
2/5 4/15 1/30 -2/60 8/3
输出样例1:
1
3 1/3
输入样例2:
1
2
2
4/3 2/3
输出样例2:
1
2
输入样例3:
1
2
3
1/3 -1/6 1/8
输出样例3:
1
7/24
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
import java.util.AbstractList;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Scanner;

//5
//2/5 4/15 1/30 -2/60 8/3
public class Main {
public static void main(String[] args){
Scanner sca = new Scanner(System.in);
ArrayList list = new ArrayList();
int n = sca.nextInt();
for(int i = 0;i < n;i++){
list.add(sca.next());
}
String s = String.join(" ",list);
String ss[] = s.split(" ");
ArrayList listm = new ArrayList();
ArrayList listz = new ArrayList();
ArrayList listb = new ArrayList();
ArrayList listzInt = new ArrayList();
int c = 0,sum=0,max=0;
for(int i=0;i<ss.length;i++){
listm.add(i,ss[i].substring(ss[i].indexOf('/')+1));
listz.add(i,ss[i].substring(0,ss[i].indexOf('/')));
}
for(int j=0;j<listm.size()-1;j++){
int n1=0;
int a = Integer.parseInt((String) listm.get(j));
int b = Integer.parseInt((String) listm.get(j+1));
max = zxg(a,b);
c= Math.max(c,max);
}
for(int y=0;y<listm.size();y++){
listb.add(y,c/Integer.parseInt((String)listm.get(y)));
listzInt.add(y,Integer.parseInt((String)listz.get(y)));
int a = (Integer)listb.get(y);
int b = (Integer)listzInt.get(y);
sum = sum +a*b;
}
cz(sum,c);
}
public static int zxg(int a,int b){
int temp,i,n1=0,n2=0;
if(b<a){
temp = b;
b = a;
a = temp;
}
for(i=a;i>0;i++){
if(i%a==0&&i%b==0){
break;
}
}
return i;
}
public static void cz(int a,int b) {
int z = 1,c=0,d=0;
for (int i = 1; i <= ((a > b) ? a : b); i++) {
if (a % i == 0 && b % i == 0) {
z = i;
}
c = a / z;
d = b / z;
}
if (c % d == 0) {
System.out.println(c / d);
} else
if(c<d){
System.out.println(c%d+"/"+d);
}else
System.out.println(c / d + " " + c % d + "/" + d);
}
}

L1-010 比较大小

分数 10

全屏浏览切换布局

作者 杨起帆

单位 浙大城市学院

本题要求将输入的任意3个整数从小到大输出。

输入格式:

输入在一行中给出3个整数,其间以空格分隔。

输出格式:

在一行中将3个整数从小到大输出,其间以“->”相连。

输入样例:
1
4 2 8
输出样例:
1
2->4->8
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import java.util.ArrayList;
import java.util.Scanner;

public class Main {
public static void main(String[] args) {
Scanner sca = new Scanner(System.in);
ArrayList list = new ArrayList();
for(int i=0;i<3;i++){
list.add(sca.next());
}
int a = 0,b = 0,c = 0,d = 0;
a = Math.max(Integer.parseInt((String) list.get(0)),Integer.parseInt((String) list.get(1)));
b = Math.max(a,Integer.parseInt((String) list.get(2)));
c = Math.min(Integer.parseInt((String) list.get(0)),Integer.parseInt((String) list.get(1)));
d = Math.min(c,Integer.parseInt((String) list.get(2)));
int sum = Integer.parseInt((String) list.get(0))+Integer.parseInt((String) list.get(1))+Integer.parseInt((String) list.get(2));
int e = sum-d-b;
System.out.println(d+"->"+e+"->"+b);
}
}

L1-011 A-B

分数 20

全屏浏览切换布局

作者 陈越

单位 浙江大学

本题要求你计算AB。不过麻烦的是,AB都是字符串 —— 即从字符串A中把字符串B所包含的字符全删掉,剩下的字符组成的就是字符串AB

输入格式:

输入在2行中先后给出字符串AB。两字符串的长度都不超过104,并且保证每个字符串都是由可见的ASCII码和空白字符组成,最后以换行符结束。

输出格式:

在一行中打印出AB的结果字符串。

输入样例:
1
2
I love GPLT!  It's a fun game!
aeiou
输出样例:
1
I lv GPLT!  It's  fn gm!

方案一

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
import java.util.HashMap;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
int m = 0,count =0;
Scanner sca = new Scanner(System.in);
String s1 = sca.nextLine();
String s2 = sca.nextLine();
HashMap map = new HashMap();
HashMap map1 = new HashMap();
for(int i =0;i <s1.length();i++){
map1.put(i,s1.charAt(i));
for(int j =0;j<s2.length();j++){
if(s1.charAt(i)==s2.charAt(j)){
count++;
if(!map.containsValue(s2.charAt(j))) {
map.put(m, s2.charAt(j));
m++;
}
}
}
}
for(int i =0;i<map1.size()+count;i++){
for(int j =0;j<map.size();j++){
if(map1.get(i)==map.get(j)){
map1.remove(i);
}
}
}
for (Object o : map1.values()){
System.out.print(o);
}

}
}

方案二

(搬运https://blog.csdn.net/Gracener/article/details/135491605)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public class Main {
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String A = br.readLine();
String B = br.readLine();

HashSet<Character> setB = new HashSet<>();
for (char ch : B.toCharArray()) {
setB.add(ch);
}

StringBuilder result = new StringBuilder();
for (char ch : A.toCharArray()) {
if (!setB.contains(ch)) {
result.append(ch);
}
}

System.out.print(result.toString());
br.close();
}
}

L1-015 跟奥巴马一起画方块

美国总统奥巴马不仅呼吁所有人都学习编程,甚至以身作则编写代码,成为美国历史上首位编写计算机代码的总统。2014年底,为庆祝“计算机科学教育周”正式启动,奥巴马编写了很简单的计算机代码:在屏幕上画一个正方形。现在你也跟他一起画吧!

输入格式:

输入在一行中给出正方形边长N(3≤N≤21)和组成正方形边的某种字符C,间隔一个空格。

输出格式:

输出由给定字符C画出的正方形。但是注意到行间距比列间距大,所以为了让结果看上去更像正方形,我们输出的行数实际上是列数的50%(四舍五入取整)。

输入样例:
1
10 a
输出样例:
1
2
3
4
5
aaaaaaaaaa
aaaaaaaaaa
aaaaaaaaaa
aaaaaaaaaa
aaaaaaaaaa
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
import java.util.Arrays;
import java.util.Scanner;
import static java.lang.System.exit;

public class Main {
public static void main(String[] args) {
Scanner sca = new Scanner(System.in);
String str = sca.nextLine();
String[] s = str.split(" ");
int column=Integer.parseInt(s[0]);
String str1 = s[1];
int line =0;
if(column<3||column>21){
exit(0);
}
if(column%2==0){
line=column/2;
}else if (column%2==1){
line =column/2+1;
}
for(int i=1;i<=line;i++){
for(int j=1;j<=column;j++){
System.out.print(str1);
}
System.out.println();
}
}
}

评论
最新文章
Linux连接CRT
Linux连接CRT
Hello World
Hello World
🍗点击食用🍔
空降评论
随便逛逛昼夜切换繁简转换