Java OpenJudge-test1

目录

01:反向输出一个三位数

02:删除单词后缀

03:单词替换

04:回文子串

05:短信计费

06:角谷猜想

07:字符串判等

08:开关灯

09:找第一个只出现一次的字符

10:素数对


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;
    }
}
  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

再见以前说再见

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值