java openjudge练习题(31—40)

  • Post author:
  • Post category:java


31:Checking order

描述

输入长度为5的数字串,检查是否是按从小到大的顺序排列,如果是,输出Yes;否则,输出No,并输出从小到大排序后的结果。

输入

长度为5的一串数字;

输出

判断结果及排序后的结果。

样例输入

1 3 5 7 9
5 3 44 7 3
1 1 2 2 3

样例输出

Yes
No 3 3 5 7 44
Yes

提示

1.测试数据很多组,采用如下的方式进行输入,每输入一组进行判断并输出,可以参考下面的模版:

int a[5];

while(cin>>a[0]>>a[1]>>a[2]>>a[3]>>a[4])

{






if (SORTED) // 输入数串已排好序

cout<<”Yes”< else

//输出No,并输出排序后的结果,注意换行!

}

import java.util.Arrays;
import java.util.Scanner;
public class Main {
	static boolean sx(int[] a){
	    for (int i = 0; i < a.length-1; i++) {
	        if (a[i+1]<a[i]) {
	            return false;
	        }
	    }
	    return true;
	}	
	 public static void main(String[] args) {
        Scanner cin = new Scanner(System.in);
      int[] a=new int[5];
        while (cin.hasNext()) {
            for (int i = 0; i < a.length; i++) {
                a[i]=cin.nextInt();
            }
            if (sx(a)) {
                System.out.println("Yes");
            }
            else{
                System.out.print("No ");
                Arrays.sort(a);
                for (int j : a) {
                    System.out.print(j+" ");
                }
                System.out.println();
            }
        }
    }
} 

32:首字母大写

描述

对一个字符串中的所有单词,如果单词的首字母不是大写字母,则把单词的首字母变成大写字母。在字符串中,单词之间通过空白符分隔,空白符包括:空格(‘ ‘)、制表符(‘\t’)、回车符(‘\r’)、换行符(‘\n’)。

输入

输入一行:待处理的字符串(长度小于80)。

输出

输出一行:转换后的字符串。

样例输入

if so, you already have a google account. you can sign in on the right.

样例输出

If So, You Already Have A Google Account. You Can Sign In On The Right.
import java.util.Arrays;
import java.util.Scanner;
 public class Main {
    public static void main(String[] args) {
        Scanner cin = new Scanner(System.in);
        String a = cin.nextLine();
        char[] b = a.toCharArray();
        boolean panduan=true;
        for (int i = 0; i < b.length; i++) {
            char c = b[i];
            if(panduan){
                if(c>='a'&&c<='z'){
                    b[i]=(char)(c-32);
                }
            }
            if(c==' '||c=='\t'||c=='\r'||c=='\n'){
                panduan=true;
            }
            else{
                panduan=false;
            }
 
        }
        System.out.println(new String(b));
    }
 
}

33:优美字符串

描述

对于给定的两个字符串,我们将要做的是将它们拼接起来,拼接成一个“优美”的字符串,那么什么样的字符串是优美的呢?举一个例子,我们要求拼接时,第一个字符串ABCE在前,第二个字符串CEDF在后,拼接的结果是ABCECEDF,接着,我们要对这个ABCECEDF进行修饰,要求将它们在连接处相同的子串重叠在一起,重叠之后的结果为ABCEDF,这就是拼接形成的优美的字符串,现在请你完成这个任务。

输入

输入包含两个用空格隔开的字符串s1和s2

输出

输出一个字符串,表示拼接之后的“优美字符串”

样例输入

ABB ABB

样例输出

ABB

提示

s1和s2的长度 1≤L≤1000


import java.util.Scanner;
 public class Main {
    public static void main(String[] args) {
        Scanner cin = new Scanner(System.in);
        String s1 = cin.next();
        String s2 = cin.next();
        for(int i=s2.length();i>=0;i--){
            String s3 = s2.substring(0, i);
            if (s1.endsWith(s3)) {
                System.out.println(s1.concat(s2.substring(i)));
                return;
            }
        }
    }
 }

.endsWith()函数用于测试

字符串

是否以指定的后缀结束,表示的字符序列是此对象表示的字符序列的后缀,则返回 true;否则返回 false。

.substring() 函数用于提取

字符串

中介于两个指定下标之间的字符。

.concat()将几个字符串连接到一起。

34:小白鼠再排队

描述

N只小白鼠(1 < N < 100),每只鼠头上戴着一顶有颜色的帽子。现在称出每只白鼠的重量,要求按照白鼠重量从小到大的顺序输出它们头上帽子的颜色。帽子的颜色用 “red”,“blue”等字符串来表示。不同的小白鼠可以戴相同颜色的帽子。白鼠的重量用整数表示。

输入

输入第一行为一个整数N,表示小白鼠的数目。

下面有N行,每行是一只白鼠的信息。第一个为正整数,表示白鼠的重量,不超过整型范围;第二个为字符串,表示白鼠的帽子颜色,字符串长度不超过10个字符。

注意:白鼠的重量各不相同。

输出

按照白鼠的重量从小到大的顺序输出白鼠的帽子颜色。

样例输入

3
30 red
50 blue
40 green

样例输出

red
green
blue
//用定义类的方法

import java.util.Arrays;
import java.util.Scanner;
 
public class Main {
 
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Scanner cin = new Scanner(System.in);
        int n = cin.nextInt();
        Mouse[] a = new Mouse[n];
        for (int i = 0; i < n; i++) {
            a[i] = new Mouse(cin.nextInt(), cin.next());
        }
        Arrays.sort(a, (b1, b2) -> b1.weight - b2.weight);
        for (Mouse b : a) {
            System.out.println(b.color);
        }
    }
 
}
 
class Mouse {
 
    int weight;
    String color;
 
    public Mouse(int weight, String color) {
        super();
        this.weight = weight;
        this.color = color;
    }
 
}


//用集合类的方法

import java.util.Comparator;
import java.util.Scanner;
import java.util.TreeMap;
public class Main {	
   static TreeMap<Integer,String> map1=new TreeMap<Integer,String>(new Comparator<Integer>() {
		public int compare(Integer o1, Integer o2) { 
	    return o1.compareTo(o2);
	    }
	}
   );	
	public static void main(String[] args){
	Scanner cin=new Scanner(System.in);
	int n=cin.nextInt();
	for(int i=1;i<=n;i++){
		int a = cin.nextInt();
	    String b = cin.next();
	      map1.put(a,b);
	  }
	   for(String value:map1.values()){
		System.out.println(value);
	  } 
	}
}

35:中位数

描述

中位数定义:一组数据按从小到大的顺序依次排列,处在中间位置的一个数或最中间两个数据的平均值(如果这组数的个数为奇数,则中位数为位于中间位置的那个数;如果这组数的个数为偶数,则中位数是位于中间位置的两个数的平均值).

给出一组无序整数,求出中位数,如果求最中间两个数的平均数,向下取整即可(不需要使用浮点数)

输入

该程序包含多组测试数据,每一组测试数据的第一行为N,代表该组测试数据包含的数据个数,1 <= N <= 15000.

接着N行为N个数据的输入,N=0时结束输入

输出

输出中位数,每一组测试数据输出一行

样例输入

4
10
30
20
40
3
40
30
50
4
1
2
3
4
0

样例输出

25
40
2
import java.util.Arrays;
import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner cin = new Scanner(System.in);
        while(true){
            int n=cin.nextInt();
            if(n==0){
                break;
            }
            int[] a = new  int[n];
            for(int i=0;i<n;i++){
                a[i] = cin.nextInt();
            }
            Arrays.sort(a);
            if(n%2==0){
                int z = n/2;
                System.out.println((a[z]+a[z-1])/2);
            }
            else{
                System.out.println(a[(n-1)/2]);
            }
             
        }
    }
 
}

36:字符串加密

描述

现要对一个由大写字母组成的字符串进行加密,有两种加密方法

(1)替换法:把一个字母替换成它之后的第k个字母,比如AXZ,k取2,加密后得到CZB(Z之后第二个字符为B)

(2)置换法:改变原来字符串中字母的顺序,比如将顺序<2 3 1>应用到ABC上得到的密文为BCA。(顺序<2 3 1>指将原字符串的第2个字符作为新字符串的第1个字符,将原字符串的第3个字符作为新字符串的第2个字符,以此类推)

这两种方法单独使用都很容易被人破解,所以我们将两种方法联合使用,对一个字符串进行两次加密,比如AXZ在k=2和顺序<2 3 1>下加密得到ZBC。

输入

包含若干组数据,每组数据一行。一组数据由三部分组成:待加密的字符串(长度不超过30)、k、顺序。

输出

对于每组数据输出一行,为加密后的字符串.

样例输入

AXZ 2 2 3 1
VICTORIOUS 1 2 1 5 4 3 7 6 10 9 8

样例输出

ZBC
JWPUDJSTVP
import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner cin =Z new Scanner(System.in);
        while(cin.hasNext()){
            String s=cin.next();           
            int len=s.length();
            int pp=cin.nextInt();
            int[] a=new int[len];
            for(int i=0;i<len;i++){
                a[i]=cin.nextInt();
            }
            char[] x=s.toCharArray();
            for(int i=0;i<len;i++){
                x[i]=zz(x[i],pp);
            }
            for(int i=0;i<len;i++){
                System.out.print(x[a[i]-1]);;
            }
            System.out.println();
             
        }
    }
    static char zz(char c,int pp){
        int qaz=c;
        pp=pp%26;
        qaz=qaz+pp;
        if(qaz>90){
            qaz-=26;
        }
        return (char)qaz;
    }
 
}

37:Problem N:矩阵交换行

描述

编写一个函数,输入参数是5*5的二维数组,和n,m两个行下标。功能:判断n,m是否在数组范围内,如果不在,则返回0;如果在范围内,则将n行和m行交换,并返回1。

在main函数中, 生成一个5*5的矩阵,输入矩阵数据,并输入n,m的值。调用前面的函数。如果返回值为0,输出error。如果返回值为1,输出交换n,m后的新矩阵。

输入

5*5矩阵的数据,以及n和m的值。

输出

如果不可交换,则输出error;

如果可交换,则输出新矩阵

样例输入

1 2 2 1 2
5 6 7 8 3
9 3 0 5 3
7 2 1 4 6
3 0 8 2 4
0 4

样例输出

3 0 8 2 4
5 6 7 8 3
9 3 0 5 3
7 2 1 4 6
1 2 2 1 2
import java.util.Scanner; 
public class Main {
    public static void main(String[] args) {
        Scanner cin = new Scanner(System.in);
        int[][] a = new int[5][5];
        for (int i = 0; i < 5; i++) {
            for (int j = 0; j < 5; j++) {
                a[i][j] = cin.nextInt();
            }
        }
        int m = cin.nextInt();
        int n = cin.nextInt();
        if (!(m >= 0 && m <= 4 && n >= 0 && n <= 4)) {
            System.out.println("error");
        } else {
            for (int k = 0; k < 5; k++) {
                int d = a[m][k];
                a[m][k] = a[n][k];
                a[n][k] = d;
            }
            for (int i = 0; i < 5; i++) {
                for (int j = 0; j < 5; j++) {
                    System.out.printf("%4d", a[i][j]);
                }
                System.out.println();
            }
        }
    } 
}

38:求字符串长度

描述

求一个长度不大于100的字符串的长度,要求不使用strlen方法,并且使用到字符指针。

输入

输出

字符串的长度。

样例输入

I love Beijing.

样例输出

15
import java.util.Scanner; 
public class Main {
    public static void main(String[] args) {
        Scanner cin = new Scanner(System.in);
        System.out.println(cin.nextLine().length());
    }
 
}

39:计算反序数

描述

编写函数,参数为一个整数,返回这个整数的反序数,例如参数是1576,返回一个整数6751,如果输入时1230,则返回321。在main函数中调用此函数,并将结果输出。

输入

一个整数

输出

它的反序数

样例输入

0
123
100
-23
-0
-100

样例输出

0
321
1
-32
0
-1
import java.util.Scanner; 
public class Main {
    public static void main(String[] args) {
        Scanner cin = new Scanner(System.in);
        while (cin.hasNext()) {
            boolean fs = false;
            int n=cin.nextInt();
            String m=n+"";
            if(m.startsWith("-")){
                fs=true;
                m=m.substring(1);
            }
            int a=Integer.parseInt(new StringBuffer(m).reverse().toString());
            if(fs&&a!=0){
                System.out.println("-"+a);
            }
            else{
                System.out.println(a);
            }
        }
    }
 
}

40:最大正向匹配

描述

给定2个短字符串str1,str2,在一个长字符串中找出以str1开头并且以str2结尾的最长字符串。

输入

第1行为str1, 表是开头字符串

第2行为str2, 表示结尾字符串

第3行为一个整数,表示接下来将要输入的数据行数n

第4行以下为输入字符串

所有字符串小于1024长

输出

n行, 输出找到的字长字串,包括首尾

样例输入

ab
ba
3
aab11234ab56ba789baba
abababa
adsjjafshabbajafkalf

样例输出

ab11234ab56ba789baba
abababa
abba

提示

可以利用指针和字符串处理函数(算法)解题

import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner cin = new Scanner(System.in);
        String a = cin.next();
        String b = cin.next();
        int n = cin.nextInt();
        cin.nextLine();
        aa:for (int i = 0; i < n; i++) {
            String c = cin.nextLine();
            int len=c.length();
            for(int j=len;j>=0;j--){
                for(int k=0;k<=len-j;k++){
                    String d=c.substring(k,k+j);
                    if(d.startsWith(a) && d.endsWith(b)) {
                        System.out.println(d);
                       continue aa;
                    }
                }
            }
        }
    }
}



版权声明:本文为m0_53433492原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。