slacr_

Just to record my life and thoughts.
笔记/编程/杂乱/极简

[Java]Task

May 1, 2023Java1520 words in 10 min

task2_4

题目

【问题描述】若将某一素数的各位数字的顺序颠倒后得到的数仍是素数,则此素数称为可逆素数。编写一个判断某数是否可逆素数的函数,在主函数中输入一个整数,再调用此函数进行判断
【输入形式】用户在第一行输入一个整数。
【输出形式】程序在下一行输出yes或是no,yes表示此数是可逆素数,no表示不是。用户输入的数必须为正整数。注意:yes或是no全是小写输出。
【样例输入】23
【样例输出】no
【样例说明】用户输入23,23各位数字颠倒之后得到32,23是素数,但32不是素数,所以23不是可逆素数。
【评分标准】结果完全正确得满分。

解答

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
public class task2_4 {
public int reverse(int num){
int newNum = 0;
while (num != 0){
int digit = num % 10;
newNum = newNum * 10 + digit;
num /= 10;
}
return newNum;
}
public boolean sushu(int num){
for (int i = 2; i < num; i++){
if(num % i == 0){
return false;
}
}
return true;
}
public boolean kenisushu(int num){
if (sushu(num)&&sushu(reverse(num))){
return true;
}
else {
return false;
}
}
public static void main(String[] args) {
task2_4 ta = new task2_4();
Scanner sc = new Scanner(System.in);
int num = sc.nextInt();
if(ta.kenisushu(num)){
System.out.println("yes");
}else {
System.out.println("no");
}
}
}

task3_5

问题

【问题描述】
从键盘输入一行英文字符串,只统计字符串中出现的每个英文字母的个数。大小写字母算相同的字符,不做区分,例如a和A,算相同字符。
【输入形式】
输入一行英文字符串。
【输出形式】
以合适的形式输出每个英文字母出现的次数,没有出现的字母,不输出次数。
【样例输入①】
hello,world.
【样例输出①】
(D)Num=1
(E)Num=1
(H)Num=1
(L)Num=3
(O)Num=2
®Num=1
(W)Num=1

解答

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
public class task3_5 {
public static void main(String[] args) {
int[] num = new int[24]; // 字符个数
char[] ch = new char[24]; // 标准字母
for (int c : num) {
c = 0;
}
for (int i = 0; i < ch.length; i++) {
ch[i] = (char)(65+i);
}
// 初始化两个数组
Scanner sc = new Scanner(System.in);
String str = sc.nextLine().toUpperCase();
for (int i = 0; i < str.length(); i++) {
// 遍历字符串
for (int j = 0; j < ch.length; j++) {
// 判断是哪一个字母
if(str.charAt(i) == ch[j]){
num[j]++;
}
}
}
for (int i = 0; i < num.length; i++) {
if(num[i] != 0){
System.out.println("("+ch[i]+")Num="+ num[i]);
}
}
}
}

Task4_2

题目

【问题描述】
从键盘输入10个整数,存放在一个数组中,然后使数组中的所有整数整体向后移动m个位置,最后m个数变成最前面的m个数,并输出移动后的结果。m从键盘输入。
【输入形式】
输入10个整数,每个整数间用空格分隔,回车。然后输入整数m。
【输出形式】
首先输出数组中的10个元素,然后输出后移m位以后的数组所有元素。
【输入输出样例】
Please input 10 numbers:
1 2 3 4 5 6 7 8 9 10
Your numbers are:
1 2 3 4 5 6 7 8 9 10
Please input m:
3
The new numbers are:
8 9 10 1 2 3 4 5 6 7

解答

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
public class task4_2 {
public static void main(String[] args) {
int[] arr = new int[10];
int m;
System.out.println("Please input 10 numbers:");
Scanner scanner = new Scanner(System.in);

for (int i = 0; i < arr.length; i++) {
arr[i] = scanner.nextInt();
}

System.out.println("Your numbers are:");
for (int i : arr) {
System.out.print(i + " ");
}
System.out.println();
System.out.println("Please input m:");
m = scanner.nextInt()%arr.length; // 取模减少循环计算
int[] n_arr = arr.clone();

for (int i = 0; i < arr.length; i++) {
if (i < m) {
n_arr[i] = arr[arr.length - m + i]; // 前m位从原数组的后m位拿
} else {
n_arr[i] = arr[i - m]; // 后arr.length-m位, 从元素组前arr.length-m位拿
}
}
System.out.println("The new numbers are:");
for (int i : n_arr) {
System.out.print(i + " ");
}
System.out.println();
}
}

Task4_4

题目

【问题描述】输入一个高精度的大正整数S(S最长可达240位),去掉其中任意N位数字后剩下的数字按原次序组成一个新的正整数S’。编程对给定的N和S,寻找一种方案使得剩下的数字组成的新数S’最小。
【输入形式】输入有两行:
1.第一行是大整数S。其中S最长可达240位。
2.第二行是整数N。S、N均以非0数字开头。
【输出形式】输出有一行,是在S中删除N位后所得的最小数字S’。
【样例输入1】
178543
4
【样例输出1】13
【样例输入2】
1002
1
【样例输出2】002
【样例说明】样例1中输入整数S=178543,N=4,要求在178543中删除4位,使剩下的数字最小。正确答案为S’= 13。样例2中输入整数S=1002,N=1,删完一位后S’= 002,而不是2,即2之前的0也必须输出。

解答

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
public class task4_4_M {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String str = scanner.nextLine();
int num = scanner.nextInt();
StringBuilder sb = new StringBuilder(str);
// 不能改变相对位置, 使用排序是错误的
/* for (int i = 0; i < sb.length() -1 ; i++) {
for (int j = 0; j < sb.length() - 1 - i; j++) {
if(sb.charAt(j) > sb.charAt(j+1)){
char temp = sb.charAt(j);
sb.setCharAt(j, sb.charAt(j+1));
sb.setCharAt(j+1, temp);
}
}
}*/
//将整数看作字符串形式读入;删数时,从前往后寻找第一个比后一个数字大的数字,然后删除之,按照这种方法删除N个数字即得最小数字。
// 要满足最小的在最高位
// 12345
// 12543
// 1354267
there:
for (int j = 0; j < num; j++) {
for (int i = 0; i < sb.length() - 1 ; i++) {
if(sb.charAt(i) > sb.charAt(i+1)){
sb.delete(i, i+1);
continue there;
}
}
sb.delete(sb.length()-1, sb.length());
}
System.out.println(sb.toString());
// System.out.println( sb.substring(0,sb.length()-num));
}
}
  • Author:

    slacr_

  • Copyright:

  • Published:

    May 1, 2023

  • Updated:

    May 1, 2023

Buy me a cup of coffee ☕.

1000000