Java程序设计2023-第一次上机练习

预备知识:Java基本语法、分支、循环、数组和字符串

7-1 累加器

请你实现一个累加器。输入n个非负整数,输出他们的和。 1<n<1000,而每个数则<10000。

输入格式:

输入包括两行。 第一行:包括一个整数n,表示总共有n个数。 第二行:包含n个整数。

输出格式:

输出n个数的和。

输入样例:

4
3 2 1 4

输出样例:

10

import java.util.Random;
import java.util.Scanner;

public class Main{
	public static void main(String [] args){
		Scanner cin  = new Scanner(System.in);
		int nums = cin.nextInt();
		int res = 0;
		for(int i=0;i<nums;i++){
			int tmp = cin.nextInt();
			res += tmp;
		}
		System.out.println(res);
	}
}

7-2 我是升旗手

一年一度的升旗手选拔又要到了,学校要求每个班级选出一位同学做升旗手的候选人。因
为升旗手对身高有严格的要求,所以班主任决定选班级里个子最高的同学(如果两位同学
一样高,则选任意一位)。你能很快地给老师答案么?

输入格式:

输入包括两行。 第一行:包括一个整数n,表示班级里共有n位同学。 第二行:包含n个三位数,表示每一位同学的身高。

输出格式:

输出身高最高的同学的身高。

输入样例:

4
130 125 129 140

输出样例:

140
import java.util.Random;
import java.util.Scanner;

public class Main{
	public static void main(String [] args){
		Scanner cin  = new Scanner(System.in);
		int nums = cin.nextInt();
		int res = -1;
		for(int i=0;i<nums;i++){
			int tmp = cin.nextInt();
			res = Math.max(res,tmp);
		}
		System.out.println(res);
	}
}

7-3 兔子繁殖问题

已知有一对兔子,每个月可以生一对兔子,而小兔子一个月后又可以生一对小兔子(比如:2月份出生的小兔子4月份可以生育)。也就是说,兔子的对数为:第一个月1对,第二个月2对,第三个月3对,第四个月5对.....假设兔子的生育期为两年,且不死。那么问题来了,你能说出每个月的兔子数么?

输入格式:

输入一个数n,表示第n个月,1<=n<=24。

输出格式:

输出这个月兔子的数目。

输入样例:

4

输出样例:

5
import java.util.Random;
import java.util.Scanner;


//1 2 3 5 
public class Main{
	public static void main(String [] args){
		Scanner cin  = new Scanner(System.in);
		int nums = cin.nextInt();
		int tmp = 1;
		int res = 1;
		for(int i=1;i<nums;i++){
			int tt = res;
			res += tmp;
			tmp = tt;
		}
		System.out.println(res);
	}
}

7-4 作品评分

全国中小学生Scratch作品大赛拉开了序幕。每个参赛选手可以通过网络直接上传作品。本次比赛人人可做评委。每个网络评委可以通过网络对每一件作品进行打分。评分系统也是请程序高手设计的,能自动去掉一个最高分和一个最低分,求出平均分。

输入格式:

输入数据包括两行: 第一行为n,表示n个评委,n>2。
第二行是n个评委的打分,分数之间有一个空格。打分是可以带有小数部分的。

输出格式:

输出平均分,结果保留两位小数。

输入样例:

6
10 9 8 7.9 9 9.5

输出样例:

8.88

import java.util.Scanner;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.io.StreamTokenizer;


//1 2 3 5 
public class Main{
	public static void main(String [] args) throws IOException{
		PrintWriter out = new PrintWriter(System.out);
		StreamTokenizer in =new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));
		Scanner cin  = new Scanner(System.in);
		in.nextToken();
		int nums = (int)in.nval;
		in.nextToken();
		double sum = in.nval;
		double mx = sum;
		double mn = sum; 
		for(int i=1;i<nums;i++){
			in.nextToken();
			double tmp = in.nval;
			if(tmp > mx){
				mx = tmp;
			}
			if(tmp < mn){
				mn = tmp;
			}
			sum += tmp;
		}
		sum -= mn;
		sum -= mx;
		double res = sum / (nums-2);
		out.println(String.format("%.2f",res));
		out.flush();	
	}
}

7-5 验证回文串

编写程序,验证一个字符串是否为回文串:是否从前读它和从后读它都是一样的。例如,mom,dad是回文串。该程序接收用户输入的字符串,判断是否为回文串,然后将判断的结果输出。

输入格式:

输入在一行中给出一个字符串。

输出格式:

如果输入的字符串为回文串,则输出yes;否则输出no。

输入样例:

在这里给出一组输入。例如:

mom

输出样例:

在这里给出相应的输出。例如:

yes

import java.util.Scanner;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.io.StreamTokenizer;


//1 2 3 5 
public class Main{
	static PrintWriter out = new PrintWriter(System.out);
	static StreamTokenizer in =new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));


	static boolean judge(String s){
		int len = s.length();
		for(int i = 0; i < len/2; i++){
			if(s.charAt(i) != s.charAt(len-i-1)){
				return false; 
			}
		}
		return true;
	}

	public static void main(String [] args) throws IOException{
		in.nextToken();
		String s = in.sval;
		if(judge(s)){
			out.println("yes");
		}
		else{
			out.println("no");
		}
		out.flush();
	}
}

7-6 jmu-Java-01入门-格式化输入输出与字符串

###本题主要考察

  • 使用Scanner处理输入
  • 使用System.out.printf进行格式化输出
  • String常用方法与字符串常用操作

main

###输入说明:

  • 输入double,然后输入3个浮点数。输出:从左到右依次输出3个double(均保留2位小数输出,宽度为5),格式依次为:右侧填充空格,左侧填充空格,直接输出
  • 输入int,然后输入3个整数(以1个或多个空格分隔)。输出:将3个整数相加后输出。
  • 输入str,然后输入3个字符串。输出:去除空格,然后倒序输出3个字符。
  • 输入line,然后输入一行字符串。输出:转换成大写后输出。
  • 如果输入不是上面几个关键词,输出:输出other

###输出说明
choice=你输入选项
该选项对应的输出内容

###提示

  1. 可使用line.split("\\s+");将以1个或多个空格分隔开的字符串分割并放入字符串数组。
  2. Scanner.nextLine与Scanner的其他next函数混用有可能出错。

输入样例:

double
1.578 3.0 3.14259
line
aaaaaaaaaa
int
1      2    3
str
321 654 987
line
dddddddddd
end

输出样例:

choice=double
1.58 , 3.00,3.14
choice=line
AAAAAAAAAA
choice=int
6
choice=str
987654321
choice=line
DDDDDDDDDD
choice=end
other

 这里要用到scanner.nextLine(),值得学习和注意

import java.util.Scanner;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.io.StreamTokenizer;


public class Main {
    static PrintWriter out = new PrintWriter(System.out);
    static StreamTokenizer in = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));

    static void solve() throws IOException{
        Scanner cin = new Scanner(System.in);
        while(true){
        in.nextToken();
        String op = in.sval;
        if(op.equals("double")){
            out.println("choice=double");
            in.nextToken();
            double n1=in.nval;
            out.printf("%-5.2f",n1);
            out.print(",");
            in.nextToken();
            double n2 = in.nval;
            out.printf("%5.2f",n2);
            out.printf(",");
            in.nextToken();
            double n3 = in.nval;
            out.printf("%.2f",n3);
            out.println();
        }
        else if(op.equals("int")){
            out.println("choice=int");
            in.nextToken();
            int a = (int)in.nval;
            in.nextToken();
            int b = (int)in.nval;
            in.nextToken();
            int c = (int)in.nval;
            out.println(a+b+c);
        }
        else if(op.equals("str")){
            out.println("choice=str");
            in.ordinaryChars('0','9');
            in.wordChars('0','9');
            in.nextToken();
            String  a = in.sval;
            in.nextToken();
            String b = in.sval;
            in.nextToken();
            String c = in.sval;
            String res = c + b + a;
            in.parseNumbers();
            out.println(res);
        }
        else if(op.equals("line")){
            out.println("choice=line");
            String s = cin.nextLine();
            s = s.toUpperCase();
            out.println(s);
        }
        else{
            out.printf("choice=%s%n",op);
            out.println("other");
        }
        out.flush();
    }
    }
    public static void main(String [] args) throws IOException{
        solve();
    }
}

7-7 结伴同行去秋游

可以去秋游啦!同学们别提多高兴了!老师说,单独行动有点危险,那么我们还是结伴同行吧。结伴的规则是这样的:排在最前的一个人和排在最后的那个人结成同伴,排在第2个的与排在倒数第2个的结成同伴......依次类推,2个一组成同伴。好,请马上排出来吧!老师语音一落,同学们“唰唰唰”很快结伴好了,准备出发喽!

输入格式:

第一行是一个整数n,表明n个同学。(2<=n<=50,n为偶数) 。
第二行n个整数表明n个同学的学号,学号之间有一个空格。

输出格式:

共n/2行,每行二个整数,表明结伴同学的学号,两个学号之间有一个空格。

输入样例:

6
5 6 4 12 3 2

输出样例:

5 2
6 3
4 12
import java.util.Scanner;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.io.StreamTokenizer;


public class Main {
    static PrintWriter out = new PrintWriter(System.out);
    static StreamTokenizer in = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));
    static Scanner cin = new Scanner(System.in);

    static void solve() throws IOException{
        int n;
        n = cin.nextInt();
        int[] a = new int[9999];
        for(int i = 0 ; i < n ; i++ ){
            a[i] = cin.nextInt();
        } 
        for(int i=0;i<n/2;i++){
            out.printf("%d %d%n",a[i],a[n-i-1]);
        }
    }
    public static void main(String [] args) throws IOException{
        solve();
        out.flush();
    }
}

7-8 摘苹果

陶陶家的院子里有一棵苹果树,每到秋天树上就会结出很多苹果。苹果成熟的时候,陶陶就会跑去摘苹果。陶陶有个30厘米高的板凳,当她不能直接用手摘到苹果的时候,就会踩到板凳上再试试。

现在已知每个苹果到地面的高度,以及陶陶把手伸直的时候能够达到的最大高度,请帮陶陶算一下她能够摘到的苹果的数目。假设她碰到苹果,苹果就会掉下来。

输入格式:

包括三行数据。
第一行是一个整数n,表示有n个苹果。苹果至少有一个,不超过1000个。
第二行包含n个100到200之间(包括100和200)的整数(以厘米为单位)分别表示这n个苹果到地面的高度,两个相邻的整数之间用一个空格隔开。
第三行是一个100到120之间(包含100和120)的整数(以厘米为单位),表示陶陶把手伸直的时候能够达到的最大高度。

输出格式:

一个整数,表示陶陶能够摘到的苹果的数目。

输入样例:

10
100 200 150 140 129 134 167 198 200 111
110

输出样例:

5
import java.util.Scanner;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.io.StreamTokenizer;


public class Main {
    static PrintWriter out = new PrintWriter(System.out);
    static StreamTokenizer in = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));
    static Scanner cin = new Scanner(System.in);

    static void solve() throws IOException{
        int n;
        n = cin.nextInt();
        int[] a = new int[9999];
        for(int i = 0 ; i < n ; i++ ){
            a[i] = cin.nextInt();
        } 
        int h = cin.nextInt();
        int res = 0;
        for(int i=0;i<n;i++){
            if(a[i]<=h+30){
                res++;
            }
        }
        out.println(res);
    }
    public static void main(String [] args) throws IOException{
        solve();
        out.flush();
    }
}

7-9 数组元素的删除

完成数组元素的移动功能:假设数组有n个元素,输入一个数x,把数组的第x个位置的元素删除了,后面的元素依次前进一个位置。
重复若干次这样的删除,得到最后的结果。

输入格式:

第一行包括一个整数n(1<=n<=100),表示数组元素的个数。
第二行输入n个数组元素,均为整数,用空格隔开。
第三行输入一个数k(1<=k<=100),表示要进行k次删除。
接下来k行,每行一个数x,表示要删除第x个元素。

输出格式:

输出经过k次删除后的数组,每两个元素之间用空格隔开。

输入样例:

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

输出样例:

1 4 5 7 8 10

import java.util.Scanner;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.io.StreamTokenizer;


public class Main {
    static PrintWriter out = new PrintWriter(System.out);
    static StreamTokenizer in = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));
    static Scanner cin = new Scanner(System.in);

    static int[] a = new int[9999];
    static int len;
    
    static void fun(int id){
        id--;
        for(int i=id;i<len-1;i++){
            a[i]=a[i+1];
        } 
        len--;
    }

    static void solve() throws IOException{
        len = cin.nextInt();
        for(int i = 0 ; i < len ; i++ ){
            a[i] = cin.nextInt();
        } 
        int m = cin.nextInt();
        for(int i=0;i<m;i++){
            int id = cin.nextInt();
            fun(id);
        }
        for(int i=0;i<len-1;i++){
            out.print(a[i]+" ");
        }
        out.println(a[len-1]);
    }
    public static void main(String [] args) throws IOException{
        solve();
        out.flush();
    }
}

7-10 jmu-Java-02基本语法-03-身份证排序

  1. 输入n,然后连续输入n个身份证号。
  2. 然后根据输入的是sort1还是sort2,执行不同的功能。输入的不是sort1或sort2,则输出exit并退出。
    输入sort1,将每个身份证的年月日抽取出来,按年-月-日格式组装,然后对组装后的年-月-日升序输出。
    输入sort2,将所有身份证按照里面的年月日升序输出。

注意:处理输入的时候,全部使用ScannernextLine()方法,以免出错。

输入样例:

6
410425198309308225
320203197206115011
431227196108033146
330226196605054190
34080019810819327X
320111197112301539
sort1
sort2
e

输出样例:

1961-08-03
1966-05-05
1971-12-30
1972-06-11
1981-08-19
1983-09-30
431227196108033146
330226196605054190
320111197112301539
320203197206115011
34080019810819327X
410425198309308225
exit

 这里采用手动排序,其实也可以实例化Comparator实现自定义类的自定义排序

import java.util.*;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.io.StreamTokenizer;
import java.lang.*;

class struct{
    private String num;
    private int id;

    public struct(int id , String num){
        this.id = id;
        this.num = num;
    }

    public void setId(int id){
        this.id = id; 
    }

    public void setNum(String Num){
        this.num = num; 
    }

    public int getId(){
        return this.id;
    }

    public String getNum(){
        return this.num;
    }
}

public class Main {

    static PrintWriter out = new PrintWriter(System.out);
    static StreamTokenizer in = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));
    static Scanner cin = new Scanner(System.in);

    static String[] a = new String[9999];
    static int len;
    static struct[] sd = new struct[9999];

    static void pre(){
        for(int i=0;i<len;i++){
            String y = a[i].substring(6,14);
            sd[i] = new struct(i,y);
        }
        for(int i=0;i<len;i++){
            for(int j=0;j<len-1;j++){
                if(sd[j].getNum().compareTo(sd[j+1].getNum()) >= 1){
                    struct tmp = sd[j];
                    sd[j] = sd[j+1];
                    sd[j+1] = tmp;
                }
            }
        }
    }

    static void sort1(){
        for(int i=0;i<len;i++){
            int id = sd[i].getId();
            out.printf("%s-%s-%s%n",a[id].substring(6,10),a[id].substring(10,12),a[id].substring(12,14));
        }
        out.flush();
    }

    static void sort2(){
        for(int i=0;i<len;i++){
            int id = sd[i].getId();
            out.println(a[id]);
        }
        out.flush();
    }

    static void solve() throws IOException{
        len = cin.nextInt();
        cin.nextLine();
        for(int i = 0 ; i < len ; i++ ){
            a[i] = cin.nextLine();
        } 
        pre();
        while(true){
            String op = cin.nextLine();
            if(op.equals("sort1")){
                sort1();
            }
            else if(op.equals("sort2")){
                sort2();
            }
            else{
                out.println("exit");
                break;
            }
        }
    }

    public static void main(String [] args) throws IOException{
        solve();
        out.flush();
    }
}

7-11 jmu-java-m02-使用二维数组存储多元线性方程组

题面

可以使用二维数组存储来存储线性方程组的系数与常数。比如,对于如下3元线性方程组
3x+y+z=1
6x+2y+z=-1
-2x+2y+z=7
可以使用二位数组存储
2 1 1 1
6 2 1 -1
-2 2 1 7
编写一个程序可以存储n元线性方程组

输入格式:

整数n,代表n元
n行、每行n+1列线性方程组的系数与常数。系数与常数为double型。

输出格式:

格式化输出二维数组。注意:使用Arrays.deepToString进行格式化输出。
依次输出n行线性方程组的系数与常数。系数以 , 分隔,系数与常数之间以 = 分隔,= 之间有两个空格。

输入样例:

3
2 1 1 1
6 2 1 -1
-2 2 1 7

输出样例:

[[2.0, 1.0, 1.0, 1.0], [6.0, 2.0, 1.0, -1.0], [-2.0, 2.0, 1.0, 7.0]]
2.0, 1.0, 1.0 = 1.0
6.0, 2.0, 1.0 = -1.0
-2.0, 2.0, 1.0 = 7.0
import java.util.*;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.io.StreamTokenizer;
import java.lang.*;



public class Main {

    static PrintWriter out = new PrintWriter(System.out);
    static StreamTokenizer in = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));
    static Scanner cin = new Scanner(System.in);


    static double[][] arr; 

    static void solve() throws IOException{
        int len = cin.nextInt();
        arr = new double[len][len+1];
        for(int i = 0 ; i < len ; i++ ){
            for(int j=0;j<=len;j++){
                arr[i][j]=cin.nextDouble();
            }
        } 
        String res = Arrays.deepToString(arr);
        out.println(res);
        for (int i = 0; i < len; i++) {
            StringBuilder str = new StringBuilder();
            for (int j = 0; j < len; j++) {
                str.append(arr[i][j]).append(", ");
            }
            str.delete(str.length() - 2, str.length());
            str.append(" = ").append(arr[i][len]);
            out.println(str);
        }
    }

    public static void main(String [] args) throws IOException{
        solve();
        out.flush();
    }
}

7-12 sdut-array2-1-矩阵转置(I)

从键盘输入矩阵的行数N,和一个N×N阶的矩阵,编程输出它的转置矩阵。

输入格式:

首行为矩阵的行数(列数)N;
然后是N行N列组成矩阵的数据。每行内数据之间用空格隔开。

输出格式:

矩阵格式输出,每行内非尾部的每个数据后跟一个空格,行尾数据后不加空格,为换行符。

输入样例:

4
1 2 3 4
1 2 3 4
1 2 3 4
1 2 3 4

输出样例:

1 1 1 1
2 2 2 2
3 3 3 3
4 4 4 4
import java.util.*;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.io.StreamTokenizer;
import java.lang.*;


public class Main {

    static PrintWriter out = new PrintWriter(System.out);
    static StreamTokenizer in = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));
    static Scanner cin = new Scanner(System.in);


    static int[][] arr; 

    static void solve() throws IOException{
        int len = cin.nextInt();
        arr = new int[len][len+1];
        for(int i=0;i<len;i++){
            for(int j=0;j<len;j++){
                arr[i][j]=cin.nextInt();
            }
        } 
        for(int i=0;i<len;i++){
            for(int j=0;j<len;j++){
                out.print(arr[j][i]);
                if(j!=len-1){
                    out.print(" ");
                }
            }
            out.println();
        }
    }

    public static void main(String [] args) throws IOException{
        solve();
        out.flush();
    }
}

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

嗯嗯你说的对

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

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

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

打赏作者

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

抵扣说明:

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

余额充值