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

仅供参考,请勿ctrl+C/V提交oj

7-1累加器

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

输入格式:

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

输出格式:

输出n个数的和。

输入样例:

4
3 2 1 4

输出样例:

10
import java.util.Scanner;
public class Main{
    public static void main(String[] args) {
        Scanner in=new Scanner(System.in);
        int n=in.nextInt();
        int res=0;
        for(int i=0;i<n;i++){
            int t=in.nextInt();
            res+=t;
        }
        System.out.println(res);
    }
}

7-2我是升旗手

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

输入格式:

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

输出格式:

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

输入样例:

4
130 125 129 140

输出样例:

140
import java.util.Scanner;
public class Main{
    public static void main(String[] args) {
        Scanner in=new Scanner(System.in);
        int n=in.nextInt();
        int res=0;
        for(int i=0;i<n;i++){
            int t=in.nextInt();
            if(t>res)res=t;
        }
        System.out.println(res);
    }
}

7-3兔子繁殖问题

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

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

输出格式: 输出这个月兔子的数目。

输入样例:

4

输出样例:

5
import java.util.Scanner;
public class Main{
    public static void main(String[] args) {
        Scanner in=new Scanner(System.in);
        int n=in.nextInt();
        int[] res;
        res=new int[n];
        res[0]=1;
        res[1]=2;
        for(int i=2;i<n;i++){
            res[i]=res[i-1]+res[i-2];
        }
        System.out.println(res[n-1]);
    }
}

7-4作品评分

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

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

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

输入样例:

6
10 9 8 7.9 9 9.5

输出样例:

8.88
import java.io.*;
public class Main{
    public static void main(String[] args) {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        try {  
            String sn = br.readLine();  
            int n=Integer.parseInt(sn);
            double mn=100;
            double mx=0;
            double res=0;
            double tmp;
            String s=br.readLine();
            String arr[]=s.split(" ");
            double a[]=new double[n];
            for(int i=0;i<n;i++){
                a[i]=Double.parseDouble(arr[i]);
                res+=a[i];
                if(a[i]>mx)mx=a[i];
                if(a[i]<mn)mn=a[i];
            }
            res-=mx+mn;
            res=res/(n-2);
            System.out.printf("%.2f",res);
        } catch (IOException e) {  
            e.printStackTrace();  
        }
    }
}

7-5验证回文串

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

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

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

输入样例:

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

输出样例:

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

import java.io.*;
public class Main{
    public static void main(String args[]){
        BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
        try{
            String s=br.readLine();
            StringBuffer buffer = new StringBuffer();   
            buffer.append(s);
            buffer.reverse();
            String s2=buffer.toString();
            if(s.equals(s2))System.out.println("yes");
            else System.out.println("no");
            
        }catch (IOException e) {  
            e.printStackTrace();  
        }
    }
}

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

###本题主要考察

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

main###输入说明:

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

###输出说明

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

###提示

可使用line.split("\\s+");将以1个或多个空格分隔开的字符串分割并放入字符串数组。
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
import java.io.*;
import java.util.Scanner;
public class Main{
    public static void main(String args[]){
        Scanner in=new Scanner(System.in);
        while(true){
            String db=in.nextLine();
            if(db.equals("double")){
                String s=in.nextLine();
                String []s1=s.split("\\s+");
                float[] f=new float[3];
                for(int i=0;i<3;i++){
                    f[i]=Float.parseFloat(s1[i]);
                }
                System.out.printf("choice=double\n");
                System.out.printf("%-5.2f,",f[0]);
                System.out.printf("%5.2f,",f[1]);
                System.out.printf("%.2f\n",f[2]);
            }else if(db.equals("int")){
                String s=in.nextLine();
                String []s1=s.split("\\s+");
                int[] a=new int[3];
                for(int i=0;i<3;i++){
                    a[i]=Integer.parseInt(s1[i]);
                }
                System.out.printf("choice=int\n");
                System.out.printf("%d\n",a[0]+a[1]+a[2]);
            }else if(db.equals("str")){
                String s=in.nextLine();
                String []s1=s.split("\\s+");
                System.out.printf("choice=str\n");
                System.out.printf("%s\n",s1[2]+s1[1]+s1[0]);
            }else if(db.equals("line")){
                String s=in.nextLine();
                s=s.toUpperCase();
                System.out.printf("choice=line\n");
                System.out.println(s);
            }else{
                System.out.printf("choice=%s\n",db);
                System.out.println("other");
                break;
            }
        }
    }
}

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.io.*;
import java.util.Scanner;
public class Main{
    public static void main(String args[]){
        Scanner in=new Scanner(System.in);
        int n=in.nextInt();
        int[] arr=new int[n];
        for(int i=0;i<n;i++){
            arr[i]=in.nextInt();
        }
        for(int i=0;i<n/2;i++){
            System.out.printf("%d %d\n",arr[i],arr[n-i-1]);
        }
    }
}

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.io.*;
public class Main{
    public static void main(String args[]){
        try{
            BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
            String sn=br.readLine();
            int n=Integer.parseInt(sn);
            int[] apple=new int[n];
            String sapple=br.readLine();
            String sapple2[]=sapple.split(" ");
            for(int i=0;i<n;i++){
                apple[i]=Integer.parseInt(sapple2[i]);
            }
            int cnt=0;
            String sh=br.readLine();
            int h=Integer.parseInt(sh);
            h+=30;
            for(int i=0;i<n;i++){
                if(apple[i]<=h)cnt++;
            }
            System.out.println(cnt);
        }catch(IOException e){
            e.printStackTrace();
        }
        
    }
}

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.*;
public class Main{
    public static void main(String[] args){
        Scanner in=new Scanner(System.in);
        int n=in.nextInt();
        int[] a=new int[n];
        for(int i=0;i<n;i++){
            a[i]=in.nextInt();
        }
        int k=in.nextInt();
        int cnt=0;
        while(k>0){
            k--;
            cnt++;
            int index=in.nextInt();
            for(int i=index-1;i<n-cnt;i++){
                a[i]=a[i+1];
            }
        }
        for(int i=0;i<n-cnt-1;i++){
            System.out.printf("%d ",a[i]);
        }
        System.out.printf("%d",a[n-cnt-1]);
    }
}

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

输入n,然后连续输入n个身份证号。
然后根据输入的是sort1还是sort2,执行不同的功能。输入的不是sort1或sort2,则输出exit并退出。
输入sort1,将每个身份证的年月日抽取出来,按年-月-日格式组装,然后对组装后的年-月-日升序输出。
输入sort2,将所有身份证按照里面的年月日升序输出。 注意:处理输入的时候,全部使用Scanner的nextLine()方法,以免出错。

输入样例:

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
import java.util.Scanner;
import java.util.Arrays;
public class Main{
    public static void main(String[] args){
        Scanner in=new Scanner(System.in);
        String strn=in.nextLine();
        int n=Integer.parseInt(strn);
        String []id=new String[n];
        for(int i=0;i<n;i++){
            id[i]=in.nextLine();
        }
        String []s1=new String[n];
        for(int i=0;i<n;i++){
            s1[i]=id[i].substring(6,14);
        }
        Arrays.sort(s1);
        String op;
        while(true){
            op=in.nextLine();
            if(op.equals("sort1")){
                for(int i=0;i<n;i++){
                    System.out.printf("%s-%s-%s\n",s1[i].substring(0,4),s1[i].substring(4,6),s1[i].substring(6,8));
                }
            }else if(op.equals("sort2")){
                for(int i=0;i<n;i++){
                    for(int j=0;j<n;j++){
                        if(id[j].substring(6,14).equals(s1[i])){
                            System.out.printf("%s\n",id[j]);
                            break;
                        }
                    }
                    
                }
            }else{
                System.out.printf("exit\n");
                break;
            }
        }
    }
}

7-11jmu-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.Scanner;
import java.util.Arrays;
public class Main{
    public static void main(String[] args){
        Scanner in=new Scanner(System.in);
        int n=in.nextInt();
        float [][]a=new float[n][n+1];
        for(int i=0;i<n;i++){
            for(int j=0;j<n+1;j++){
                a[i][j]=in.nextFloat();
            }
        }
        System.out.println(Arrays.deepToString(a));
        for(int i=0;i<n;i++){
            System.out.printf("%.1f",a[i][0]);
            for(int j=1;j<n;j++){
                System.out.printf(", %.1f",a[i][j]);
            }
            System.out.printf(" = %.1f\n",a[i][n]);
        }
    }
}

7-12sdut-array2-1-矩阵转置

从键盘输入矩阵的行数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.Scanner;
import java.io.*;
public class Main{
    public static void main(String[] args){
        Scanner in=new Scanner(System.in);
        int n=in.nextInt();
        int[][] a=new int[n][n];
        for(int i=0;i<n;i++){
            for(int j=0;j<n;j++){
                a[i][j]=in.nextInt();
            }
        }
        int [][]b=new int[n][n];
        for(int i=0;i<n;i++){
            for(int j=0;j<n;j++){
                b[i][j]=a[j][i];
            }
        }
        for(int i=0;i<n;i++){
            for(int j=0;j<n;j++){
                System.out.printf("%d",b[i][j]);
                if(j!=n-1)System.out.printf(" ");
                else System.out.printf("\n");
            }
        }
    }
}
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值