Java openjudge javastudy 9

一系列编程挑战涉及到字符串操作,如反向输出、删除后缀、单词替换、回文子串检测、短信计费、角谷猜想、字符串判等、开关灯问题、找第一个只出现一次的字符以及寻找素数对。这些挑战覆盖了字符串处理、条件判断、循环、数组操作和算法设计等多个方面,旨在提升编程思维和问题解决能力。
摘要由CSDN通过智能技术生成

01:反向输出一个三位数

描述

将一个三位数反向输出。

输入

一个三位数n。

输出

反向输出n。

样例输入

100

样例输出

001
import java.util.Scanner;
 
public class Main {
 
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
 
        System.out.println(new StringBuffer(sc.next()).reverse());
    }
}


//reverse()  字符串翻转 

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);
        }
    }
 
}



//substring(begin,end)   截取字符串 [begin,end)
//stringObject.lastIndexOf(value,fromindex)    从fromindex开始查找最后一次出现value的位置
//stringObject.indexOf(searchvalue,fromindex)   从fromindex开始查找第一次出现value的位置

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 s1=sc.next();
        String s2=sc.next();
        String[] ss=s.split(" ");
        for(String st:ss){
            if(st.equals(s1)){
                System.out.print(s2+" ");
            }
            else{
                System.out.print(st+" ");
            }
        }
    }
}


//split("regex",limit)    以regex作为分隔符分割字符串,regex可有多个字符用|连接,limit参数控制分割的次数

04:回文子串

描述

给定一个字符串,输出所有长度至少为2的回文子串。

回文子串即从左往右输出和从右往左输出结果是一样的字符串,比如:abba,cccdeedccc都是回文字符串。

输入

一个字符串,由字母或数字组成。长度500以内。

输出

输出所有的回文子串,每个子串一行。
子串长度小的优先输出,若长度相等,则出现位置靠左的优先输出。

样例输入

123321125775165561

样例输出

33
11
77
55
2332
2112
5775
6556
123321
165561
import java.util.Scanner;
 
public class Main {
 
    static boolean huiwen(String s){
        for(int i=0;i<s.length()/2;i++){
            if(s.charAt(i)!=s.charAt(s.length()-1-i)){
                return false;
            }
        }
        return true;
    }
    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 t=s.substring(j,j+i);
                if(huiwen(t)){
                    System.out.println(t);
                }
            }
        }
    }
}


//charAt(index)    获取字符串index位置处的字符

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 t1 = sc.nextInt();
            int t2 = t1 / 70;
            int t3 = t1 % 70;
            if (t3 != 0) {
                t2++;
            }
            sum += 0.1 * t2;
        }
        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();
        if(n==1){
            System.out.println("End");
            return;
        }
        else{ while(true){
            if(n%2==0){
             
                System.out.println(n+"/2="+(n/2));
                n/=2;
                 
            }
            else{
                System.out.println(n+"*3+1="+(n*3+1));
                n=n*3+1;
            }
            if(n==1){
                System.out.println("End");
                return;
            }
        }
        }
             }
 }

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();
        String s2=sc.nextLine();
        s1=s1.replaceAll(" ","");
        s2=s2.replaceAll(" ","");
        if(s1.equalsIgnoreCase(s2)){
            System.out.println("YES");
        }
        else{
            System.out.println("NO");
        }
     }
 }



//relpaceAll(x,y)   将字符串中的所有x全部替换为y
//s1.equalsIgnoreCase(s2)    不区分大小写的判等
//s1.equals(s2)              区分大小写的判等  注意与==的区别

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.Arrays;
import java.util.Scanner;
 
public class Main {
 
    public static void main(String[] args) {
        int n,m;
        Scanner sc=new Scanner(System.in);
        n=sc.nextInt();
        m=sc.nextInt();
        int[] a=new int[n+1];
        Arrays.fill(a, 1);
        for(int i=1;i<=m;i++) {
            for(int j=1;j<=n;j++) {
                if(j%i==0) {
                    a[j]=-a[j];
                }
            }
        }
        String s="";
        for(int i=1;i<=n;i++) {
            if(a[i]==-1) {
                s=s+i+",";
            }
        }
        System.out.println(s.substring(0,s.length()-1));
     }
 }



//fill(xxx[] a,xxx v)    用v填充数组的每一个元素

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

​​​​​​​​​​​​​​描述

给定一个只包含小写字母的字符串,请你找到第一个仅出现一次的字符。如果没有,输出no。

输入

一个字符串,长度小于100000。

输出

输出第一个仅出现一次的字符,若没有则输出no。

样例输入

abcabd

样例输出

import java.util.Scanner;
 
public class Main {
 
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        String s=sc.next();
        int len=s.length();
        int[] a=new int[26];
        for(int i=0;i<len;i++) {
            a[s.charAt(i)-'a']++;
        }
        for(int i=0;i<len;i++) {
            if(a[s.charAt(i)-'a']==1) {
                System.out.println(s.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 7
import java.util.Scanner;
 
public class Main {
    static boolean sushu(int n) {
        for (int i = 2; i * i <= n; i++) {
            if (n % i == 0) {
                return false;
            }
        }
        return true;
    }
 
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int flag=0;
        for (int i = 3; i + 2 <= n; i++) {
            if (sushu(i) && sushu(i + 2)) {
                flag=1;
                System.out.println(i + " " + (i + 2));
            }
        }
        if(flag==0){
            System.out.println("empty");
        }
    }
}

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一些Java OpenJudge练习题: 1. 计算a+b 题目描述: 给定两个整数a和b,计算它们的和a+b。 输入格式: 共一行,包含两个整数a和b。 输出格式: 共一行,包含一个整数,表示a+b的值。 样例输入: 3 4 样例输出: 7 Java代码: import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int a = scanner.nextInt(); int b = scanner.nextInt(); System.out.println(a + b); } } 2. 计算圆的面积 题目描述: 输入一个半径r,计算圆的面积,保留小数点后7位。 输入格式: 共一行,包含一个整数r,表示圆的半径。 输出格式: 共一行,包含一个实数,表示圆的面积,保留小数点后7位。 样例输入: 4 样例输出: 50.2654825 Java代码: import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int r = scanner.nextInt(); double area = Math.PI * r * r; System.out.printf("%.7f", area); } } 3. 计算三角形面积 题目描述: 输入三角形的三条边a、b、c,计算三角形的面积,保留小数点后7位。 输入格式: 共一行,包含三个实数a、b、c,表示三角形的三条边。 输出格式: 共一行,包含一个实数,表示三角形的面积,保留小数点后7位。 样例输入: 3 4 5 样例输出: 6.0000000 Java代码: import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); double a = scanner.nextDouble(); double b = scanner.nextDouble(); double c = scanner.nextDouble(); double p = (a + b + c) / 2; double area = Math.sqrt(p * (p - a) * (p - b) * (p - c)); System.out.printf("%.7f", area); } } 希望这些题目可以帮助您练习Java编程。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值