目录
01:反向输出一个三位数
描述
将一个三位数反向输出。
输入
一个三位数n。
输出
反向输出n。
样例输入
100
样例输出
001
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
String s = n + "";
for (int i = s.length() - 1; i >= 0; i--) {
System.out.print(s.charAt(i));
}
}
}
02:删除单词后缀
描述
给定一个单词,如果该单词以er、ly或者ing后缀结尾, 则删除该后缀(题目保证删除后缀后的单词长度不为0), 否则不进行任何操作。
输入
输入一行,包含一个单词(单词中间没有空格,每个单词最大长度为32)。
输出
输出按照题目要求处理后的单词。
样例输入
referer
样例输出
refer
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String s = sc.next();
if (s.endsWith("er") || s.endsWith("ly")) {
System.out.println(s.substring(0, s.length() - 2));
} else if (s.endsWith("ing")) {
System.out.println(s.substring(0, s.length() - 3));
} else System.out.println(s);
}
}
03:单词替换
描述
输入一个字符串,以回车结束(字符串长度<=100)。该字符串由若干个单词组成,单词之间用一个空格隔开,所有单词区分大小写。现需要将其中的某个单词替换成另一个单词,并输出替换之后的字符串。
输入
输入包括3行,
第1行是包含多个单词的字符串 s;
第2行是待替换的单词a(长度 <= 100);
第3行是a将被替换的单词b(长度 <= 100).
s, a, b 最前面和最后面都没有空格.
输出
输出只有 1 行,将s中所有单词a替换成b之后的字符串。
样例输入
You want someone to help you
You
I
样例输出
I want someone to help you
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String s = sc.nextLine();
String a = sc.next();
String b = sc.next();
String[] ss = s.split(" ");
for (int i = 0; i < ss.length; i++) {
if (ss[i].equals(a)) {
ss[i] = b;
}
}
for (int j = 0; j < ss.length; j++) {
if (j == ss.length - 1) {
System.out.print(ss[j]);
} else
System.out.print(ss[j] + " ");
}
}
}
04:回文子串
描述
给定一个字符串,输出所有长度至少为2的回文子串。
回文子串即从左往右输出和从右往左输出结果是一样的字符串,比如:abba,cccdeedccc都是回文字符串。
输入
一个字符串,由字母或数字组成。长度500以内。
输出
输出所有的回文子串,每个子串一行。
子串长度小的优先输出,若长度相等,则出现位置靠左的优先输出。
样例输入
123321125775165561
样例输出
33
11
77
55
2332
2112
5775
6556
123321
165561
#方法一
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String s = sc.next();
for (int i = 2; i <= s.length(); i++) {
for (int j = 0; j <= s.length() - i; j++) {
String ss = s.substring(j, j + i);
if (huiwen(ss)) {
System.out.println(ss);
}
}
}
}
static boolean huiwen(String s) { //判断是否为回文字符串
if (s == null) {
return false;
}
int i = 0;
int j = s.length() - 1;
while (j > i) {
if (s.charAt(i) != s.charAt(j)) {
return false;
} else {
i++;
j--;
}
}
return true;
}
}
#方法二
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String s = sc.next();
for (int i = 2; i <= s.length(); i++) {
for (int j = 0; j <= s.length() - i; j++) {
String ss = s.substring(j, j + i);
if (huiwen(ss)) {
System.out.println(ss);
}
}
}
}
static boolean huiwen(String a) { //判断是否为回文字符串
StringBuffer ss = new StringBuffer(a);
if (a.equals(ss.reverse().toString())) {
return true;
}
return false;
}
}
05:短信计费
描述
用手机发短信,一条短信资费为0.1元,但限定一条短信的内容在70个字以内(包括70个字)。如果你一次所发送的短信超过了70个字,则会按照每70个字一条短信的限制把它分割成多条短信发送。假设已经知道你当月所发送的短信的字数,试统计一下你当月短信的总资费。
输入
第一行是整数n,表示当月发送短信的总次数,接着n行每行一个整数,表示每次短信的字数。
输出
输出一行,当月短信总资费,单位为元,精确到小数点后1位。
样例输入
10
39
49
42
61
44
147
42
72
35
46
样例输出
1.3
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
double sum = 0;
for (int i = 0; i < n; i++) {
int a = sc.nextInt();
if(a%70 == 0) {
a/= 70;
} else {
a = a/70 + 1;
}
sum += a * 0.1;
}
System.out.printf("%.1f", sum);
}
}
06:角谷猜想
描述
所谓角谷猜想,是指对于任意一个正整数,如果是奇数,则乘3加1,如果是偶数,则除以2,得到的结果再按照上述规则重复处理,最终总能够得到1。如,假定初始整数为5,计算过程分别为16、8、4、2、1。
程序要求输入一个整数,将经过处理得到1的过程输出来。
输入
一个正整数
输出
从输入整数到1的步骤,每一步为一行,每一部中描述计算过程,假定输入为7,则输出为:
7*3+1=22
22/2=11
11*3+1=34
34/2=17
17*3+1=52
52/2=26
26/2=13
13*3+1=40
40/2=20
20/2=10
10/2=5
5*3+1=16
16/2=8
8/2=4
4/2=2
2/2=1
最后一行输出"End",如果输入为1,直接输出"End"
样例输入
5
样例输出
5*3+1=16
16/2=8
8/2=4
4/2=2
2/2=1
End
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
while (n != 1) {
if (n % 2 != 0) {
System.out.print(n + "*3+1=");
n = n * 3 + 1;
System.out.println(n);
}
if (n % 2 == 0) {
System.out.print(n + "/2=");
n = n / 2;
System.out.println(n);
}
}
System.out.println("End");
}
}
07:字符串判等
描述
判断两个由大小写字母和空格组成的字符串在忽略大小写,且忽略空格后是否相等。
输入
两行,每行包含一个字符串。
输出
若两个字符串相等,输出YES,否则输出NO。
样例输入
a A bb BB ccc CCC
Aa BBbb CCCccc
样例输出
YES
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String s1 = sc.nextLine().toLowerCase();
String s2 = sc.nextLine().toLowerCase();
String[] s = s1.split(" ");
String[] ss = s2.split(" ");
StringBuffer a = new StringBuffer();
StringBuffer b = new StringBuffer();
for(int i = 0;i<s.length;i++){
a.append(s[i]);
}
for(int i = 0;i<ss.length;i++){
b.append(ss[i]);
}
if (a.substring(0).equals(b.substring(0))){
System.out.println("YES");
}
else System.out.println("NO");
}
}
08:开关灯
描述
假设有N盏灯(N为不大于5000的正整数),从1到N按顺序依次编号,初始时全部处于开启状态;有M个人(M为不大于N的正整数)也从1到M依次编号。
第一个人(1号)将灯全部关闭,第二个人(2号)将编号为2的倍数的灯打开,第三个人(3号)将编号为3的倍数的灯做相反处理(即,将打开的灯关闭,将关闭的灯打开)。依照编号递增顺序,以后的人都和3号一样,将凡是自己编号倍数的灯做相反处理。
请问:当第M个人操作之后,哪几盏灯是关闭的,按从小到大输出其编号,其间用逗号间隔。
输入
输入正整数N和M,以单个空格隔开。
输出
顺次输出关闭的灯的编号,其间用逗号间隔。
样例输入
10 10
样例输出
1,4,9
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
int[] N_arr = new int[N];
int M = sc.nextInt();
int x = -1;
for (int i = 0; i < M; i++) {
if (i == 0) { //第一个人将灯全部关闭
for (int i1 = 0; i1 < N; i1++) {
N_arr[i1] = -1;
}
} else if (i >= 1) { //之后的人将凡是自己编号倍数的灯做相反处理。
for (int i2 = 0; i2 < N; i2++) {
if ((i2 + 1) % (i + 1) == 0)
N_arr[i2] *= x;
}
}
}
StringBuffer ss = new StringBuffer();
for (int i = 0; i < N; i++) {
if (N_arr[i] == -1) {
ss.append((i + 1) + ",");
}
}
System.out.println(ss.substring(0, ss.length() - 1));
}
}
09:找第一个只出现一次的字符
描述
给定一个只包含小写字母的字符串,请你找到第一个仅出现一次的字符。如果没有,输出no。
输入
一个字符串,长度小于100000。
输出
输出第一个仅出现一次的字符,若没有则输出no。
样例输入
abcabd
样例输出
c
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String str = sc.next().toLowerCase();
for (int i = 0; i < str.length(); i++) {
for (int j = 0; j < str.length(); j++) {
if (str.charAt(i) == str.charAt(j) && i != j) {
break;
}
if (j == str.length() - 1) {
System.out.print(str.charAt(i));
return;
}
}
}
System.out.println("no");
}
}
10:素数对
描述
两个相差为2的素数称为素数对,如5和7,17和19等,本题目要求找出所有两个数均不大于n的素数对。
输入
一个正整数n。1 <= n <= 10000。
输出
所有小于等于n的素数对。每对素数对输出一行,中间用单个空格隔开。若没有找到任何素数对,输出empty。
样例输入
100
样例输出
3 5
5 7
11 13
17 19
29 31
41 43
59 61
71 73
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int x = sc.nextInt(); // 输入只有一个正整数x
int count = 0;
for (int i = 3; i <= x - 2; i++) {
if (sushu(i) && sushu(i + 2)) {
System.out.println(i + " " + (i + 2));
count++;
}
}
if (count != 0) return;
else System.out.println("empty");
}
static Boolean sushu(int a) { // 素数
for (int i = 2; i < a; i++) {
if (a % i == 0) {
return false;
}
}
return true;
}
}