首页 > 其他分享 >PTA三次题目集总结-第二次blog

PTA三次题目集总结-第二次blog

时间:2024-06-07 13:11:33浏览次数:17  
标签:输出 题目 String 引脚 int PTA blog return public

以下内容是我对pta题目集4-6次大作业的总结


nchu-software-oop-2024-上-4

本次作业新增内容:

1、输入选择题题目信息

题目信息为独行输入,一行为一道题,多道题可分多行输入。

格式:"#Z:"+题目编号+" "+"#Q:"+题目内容+" "#A:"+标准答案
格式基本的约束与一般的题目输入信息一致。

新增约束:标准答案中如果包含多个正确答案(多选题),正确答案之间用英文空格分隔。
例如:
// #Z:2 #Q:宋代书法有苏黄米蔡四家,分别是: #A:苏轼 黄庭坚 米芾 蔡襄
多选题输出:

输出格式与一般答卷题目的输出一致,判断结果除了true、false,增加一项“partially correct”表示部分正确。
多选题给分方式:

答案包含所有正确答案且不含错误答案给满分;包含一个错误答案或完全没有答案给0分;包含部分正确答案且不含错误答案给一半分,如果一半分值为小数,按截尾规则只保留整数部分。
例如:

点击查看代码
#N:1 #Q:1+1= #A:2
#Z:2 #Q:党十八大报告提出要加强()建设。A 政务诚信 B 商务诚信 C社会诚信 D司法公信 #A:A B C D
#T:1 1-5 2-9
#X:20201103 Tom
#S:1 20201103 #A:1-5 #A:2-A C
end

输出:

点击查看代码
alert: full score of test paper1 is not 100 points
1+1=~5~false
党十八大报告提出要加强()建设。A 政务诚信 B 商务诚信 C社会诚信 D司法公信~A C~partially correct
20201103 Tom: 0 4~4

2、输入填空题题目信息

题目信息为独行输入,一行为一道题,多道题可分多行输入。

格式:"#K:"+题目编号+" "+"#Q:"+题目内容+" "#A:"+标准答案
格式基本的约束与一般的题目输入信息一致。
例如:#K:2 #Q:古琴在古代被称为: #A:瑶琴或七弦琴
填空题输出:

输出格式与一般答卷题目的输出一致,判断结果除了true、false,增加一项”partially correct”表示部分正确。

填空题给分方式:

答案与标准答案内容完全匹配给满分,包含一个错误字符或完全没有答案给0分,包含部分正确答案且不含错误字符给一半分,如果一半分值为小数,按截尾规则只保留整数部分。

例如:

点击查看代码
#N:1 #Q:1+1= #A:2
#K:2 #Q:古琴在古代被称为: #A:瑶琴或七弦琴
#T:1 1-5 2-10
#X:20201103 Tom
#S:1 20201103 #A:1-5 #A:2-瑶琴
end

输出:

点击查看代码
alert: full score of test paper1 is not 100 points
1+1=~5~false
古琴在古代被称为:~瑶琴~partially correct
20201103 Tom: 0 5~5

3、输出顺序变化

只要是正确格式的信息,可以以任意的先后顺序输入各类不同的信息。比如试卷可以出现在题目之前,删除题目的信息可以出现在题目之前等。

例如:

点击查看代码
#T:1 1-5 2-10
#N:1 #Q:1+1= #A:2
#K:2 #Q:古琴在古代被称为: #A:瑶琴或七弦琴
#X:20201103 Tom
#S:1 20201103 #A:1-5 #A:2-古筝
end
输出:
点击查看代码
alert: full score of test paper1 is not 100 points
1+1=~5~false
古琴在古代被称为:~古筝~false
20201103 Tom: 0 0~0
4、多张试卷信息

本题考虑多个同学有多张不同试卷的答卷的情况。输出顺序优先级为学号、试卷号,按从小到大的顺序先按学号排序,再按试卷号。

例如:

点击查看代码
#T:1 1-5 2-10
#T:2 1-8 2-21
#N:1 #Q:1+1= #A:2
#S:2 20201103 #A:1-2 #A:2-古筝
#S:1 20201103 #A:1-5 #A:2-瑶琴或七弦琴
#S:1 20201104 #A:1-2 #A:2-瑟
#S:2 20201104 #A:1-5 #A:2-七弦琴
#X:20201103 Tom-20201104 Jack
#K:2 #Q:古琴在古代被称为: #A:瑶琴或七弦琴
end
输出:
点击查看代码
alert: full score of test paper1 is not 100 points
alert: full score of test paper2 is not 100 points
1+1=~5~false
古琴在古代被称为:~瑶琴或七弦琴~true
20201103 Tom: 0 10~10
1+1=~2~true
古琴在古代被称为:~古筝~false
20201103 Tom: 8 0~8
1+1=~2~true
古琴在古代被称为:~瑟~false
20201104 Jack: 5 0~5
1+1=~5~false
古琴在古代被称为:~七弦琴~partially correct
20201104 Jack: 0 10~10

我的做法

  1. 对于选择题的改动,把之前的单选题改成了多选题,并且有半对半错的结果。我的做法是:把答题卡上的答案先存储在一个arrylist集合中,对照正确答案时,先遍历答题卡上的答案,对于答题卡上的每一个选项,都对正确答案进行遍历,将结果分为三种情况,全都能在正确答案上找到且数量与其相当、全都能在正确答案上找到且数量较少、有找不到的。三种情况分别对应全对、半对半错、错。
点击查看代码
class Select extends Question{
    public Select(int a,String b,String c){
        setnumber(a);
        setcontent(b);
        setstandardAnswer(c);
    }
    @Override
    public int judge(String answer){
        String[] b1=getstandardAnswer().trim().split(" ");
        char[] b=new char[b1.length];
        for(int i=0;i<b1.length;i++){
            b[i]=b1[i].trim().charAt(0);
        }
        String[] a1=answer.trim().split(" ");
        char[] a=new char[a1.length];
        for(int i=0;i<a1.length;i++){
            a[i]=a1[i].trim().charAt(0);
        }
        for(char x:a){
            int kk=0;
            for(char y:b){
                if(x==y){
                    kk=1;
                    break;
                }
            }
            if(kk==0){
                return 1;
            }
        }
        if(a.length==b.length){
            return 3;
        }
        else
            return 2;

    }
}
  1. 填空题的增加,跟选择题的做法一致,记录题号、题目内容以及标准答案。与多选题不同的判别正误的地方是,把正确答案和答题卡上的答案的字符串形式的答案拆分成字符数组的形式。找每一个字符是否有对应。
点击查看代码
class Tiankong extends Question{
    public Tiankong(int a,String b,String c){
        setnumber(a);
        setcontent(b);
        setstandardAnswer(c);
    }
    @Override
    public int judge(String answer){
        char[] a=answer.toCharArray();
        char[] b=getstandardAnswer().toCharArray();
        for(char x:a){
            int kk=0;
            for(char y:b){
                if(x==y){
                    kk=1;
                    break;
                }
            }
            if(kk==0){
                return 1;
            }
        }
        if(a.length==b.length){
            return 3;
        }
        else
            return 2;
    }
}
  1. 输出顺序打乱,先对输入的内容进行整理和存储,等读取完了输入内容后再将输入的内容相关的联系在一起。(以下是对于部分输入内容判断后的整理存储操作)
点击查看代码
if(N==1)
            {
                int num=0;
                String con="";
                String an="";
                for(int y=0;y<parts.length;y++)
                {
                    if(parts[y].trim().equals("N"))
                        num=Integer.parseInt(parts[y+1].trim());
                    else if(parts[y].trim().equals("Q"))
                        con=parts[y+1].trim();
                    else if(parts[y].trim().equals("A"))
                        an=parts[y+1].trim();
                }
                Question q=new Commen(num,con,an);
                qq.add(q);
            }
            else if(K==1){
                int num=0;
                String con="";
                String an="";
                for(int y=0;y<parts.length;y++)
                {
                    if(parts[y].trim().equals("K"))
                        num=Integer.parseInt(parts[y+1].trim());
                    else if(parts[y].trim().equals("Q"))
                        con=parts[y+1].trim();
                    else if(parts[y].trim().equals("A"))
                        an=parts[y+1].trim();
                }
                Question q=new Tiankong(num,con,an);
                qq.add(q);
            }
  1. 多张试卷信息,先遍历学号,再对每个学号遍历所有其对应的试卷号输出。
点击查看代码
for(Answer a:An){
            if(a.getanswernumber()==-1){
                System.out.print("The test paper number does not exist");
            }//遍历答卷输出没有对应试卷的答卷??????????????????????????????
            else {
                a.print();
                int ju=0;
                for(Student stu:student){
                    if(a.getId().equals(stu.getId())){
                        ju=1;
                        System.out.print(stu.getId() + " "+ stu.getName() + ":");
                        int sum=0;
                        for(int x=0;x<a.getJu().size();x++){//遍历正误卡
                            Ju j=a.getJu().get(x);
                            if(j.getResult().equals("true")){
                                System.out.print(" " +a.gett().getscore().get(x));
                                sum=sum+a.gett().getscore().get(x);
                            }
                            else if(j.getResult().equals("false")){
                                System.out.print(" " + 0);
                                sum=sum+0;
                            }
                            else {
                                int l=a.gett().getscore().get(x)/2;
                                System.out.print(" " + l);
                                sum=sum+l;
                            }
                        }
                        System.out.println("~" +sum);
                    }
                }
                if(ju==0){//没有对应的学生
                    System.out.print(a.getId() + " not found");
                }
            }
        }

总结与展望

满分82,得分80,还剩一个测试点没过,衷心希望能够在以后的作业中把所有的测试点都列举出来,或者至少给出提示,这样我们才能知道自己哪里没有考虑到,不然就一直蒙在鼓里不会的还是不会甚至不知从何学起!!!


nchu-software-oop-2024-上-5

本次题目大致内容

1、控制设备模拟

本题模拟的控制设备包括:开关、分档调速器、连续调速器。

开关:包括0和1两种状态。

开关有两个引脚,任意一个引脚都可以是输入引脚,而另一个则是输出引脚。开关状态为0时,无论输入电位是多少,输出引脚电位为0。当开关状态为1时,输出引脚电位等于输入电位。
分档调速器

按档位调整,常见的有3档、4档、5档调速器,档位值从0档-2(3/4)档变化。本次迭代模拟4档调速器,每个档位的输出电位分别为0、0.3、0.6、0.9倍的输入电压。
连续调速器

没有固定档位,按位置比例得到档位参数,数值范围在[0.00-1.00]之间,含两位小数。输出电位为档位参数乘以输入电压。
2、受控设备模拟

本题模拟的受控设备包括:灯、风扇。两种设备都有两根引脚,通过两根引脚电压的电压差驱动设备工作。

灯有两种工作状态:亮、灭。在亮的状态下,有的灯会因引脚电位差的不同亮度会有区别。
风扇在接电后有两种工作状态:停止、转动。风扇的转速会因引脚的电位差的不同而有区别。
本次迭代模拟两种灯具。

白炽灯:

亮度在0~200lux(流明)之间。
电位差为0-9V时亮度为0,其他电位差按比例,电位差10V对应50ux,220V对应200lux,其他电位差与对应亮度值成正比。白炽灯超过220V。
日光灯:

亮度为180lux。
只有两种状态,电位差为0时,亮度为0,电位差不为0,亮度为180。

工作电压区间为80V-150V,对应转速区间为80-360转/分钟。80V对应转速为80转/分钟,150V对应转速为360转/分钟,超过150V转速为360转/分钟(本次迭代暂不考虑电压超标的异常情况)。其他电压值与转速成正比,输入输出电位差小于80V时转速为0。
2、连接信息

一条连接信息占一行,用[]表示一组连接在一起的设备引脚,引脚与引脚之间用英文空格" "分隔。

格式:"["+引脚号+" "+...+" "+引脚号+"]"
例如:[K1-1 K3-2 D5-1]表示K1的输入引脚,K3的输出引脚,D5的1号引脚连接在一起。
约束条件:

本次迭代不考虑两个输出引脚短接的情况
考虑调速器输出串联到其他控制设备(开关)的情况
不考虑调速器串联到其他调速器的情况。
不考虑各类控制设备的并联接入或反馈接入。例如,K1的输出接到L2的输入,L2的输出再接其他设备属于串联接线。K1的输出接到L2的输出,同时K1的输入接到L2的输入,这种情况属于并联。K1的输出接到L2的输入,K1的输入接到L2的输出,属于反馈接线。
3、控制设备调节信息

开关调节信息格式:

//#+设备标识K+设备编号,例如:#K2,代表切换K2开关的状态。
分档调速器的调节信息格式:

// #+设备标识F+设备编号+"+" 代表加一档,例如:#F3+,代表F3输出加一档。
//#+设备标识F+设备编号+"-" 代表减一档,例如:#F1-,代表F1输出减一档。
连续调速器的调节信息格式:

//#+设备标识L+设备编号+":" +数值 代表将连续调速器的档位设置到对应数值,例如:#L3:0.6,代表L3输出档位参数0.6。
迭代1:只有一条线路,所有元件串联
输入样例:

点击查看代码
[VCC K1-1]
[K1-2 D2-1]
[D2-2 GND]
#K1
end

输出样例:

点击查看代码
@K1:closed
@D2:360

我的做法

  1. 按照推荐的类的创建,先建立了控制设备类和受控设备类,L、F都继承于控制设备,这里我把开关独立了出来,B、R、D都继承于受控设备类。再建立一条线路类(即串联主电路)
  2. 主要思路,总电路电压220V,通过变压器后改变电路电压,得到对应的亮度或者转速。
  3. 注意事项,若有开关时,需要所有的开关都是closed的状态电流才能流通,否则是断路,对于分段调速器,当档值被调高或调低至其两端的极值时,以极值来计。
点击查看代码
public String stata() {

        if(level<=0){
            return "0";
        } else if (level==1) {
            return "1";
        } else if (level==2) {
            return "2";
        } else if (level==3) {
            return "3";
        }
        else
            return "3";
    }

总结与展望

满分75,得分75,衷心希望能够在以后的作业中把所有的测试点都列举出来,或者至少给出提示,这样我们才能知道自己哪里没有考虑到,不然就一直蒙在鼓里不会的还是不会甚至不知从何学起!!

nchu-software-oop-2024-上-6

本次题目大致内容(改动)

1.本次迭代增加一种落地扇。

工作电压区间为 [80V,150V],对应转速区间为 80-360 转/分钟。电压在[80,100)V 区间对应转速为 80 转/分 钟,[100-120)V 区间对应转速为 160 转/分钟,[120-140)V 区间对应转速为 260 转/分钟,超过 140V 转速 为 360 转/分钟(本次迭代暂不考虑电压超标的异常情况)
2.本次迭代考虑电阻:白炽灯的电阻为 10,日光灯的电阻为 5,吊扇的电阻为 20,落 地扇的电阻为 20
迭代2:线路中包含一个并联电路
输入样例:

点击查看代码
#T1:[IN K1-1] [K1-2 D2-1] [D2-2 OUT]
#T2:[IN K2-1] [K2-2 D1-1] [D1-2 OUT]
#M1:[T1 T2]
#T3:[VCC L1-1] [L1-2 M1-IN] [M1-OUT D3-1] [D3-2 GND]
#K1
end

输出样例:

点击查看代码
@K1:closed
@K2:turned on
@L1:0.00
@D1:0
@D2:0
@D3:0

我的做法

  1. 增加落地扇类,继承于受控设备类
点击查看代码
class A extends controlled implements Comparable<A>{
    @Override
    public String getstata() {
        int u=(int)getU();
        if(u>=80&&u<=99){
            return "80";
        }
        else if(u>=100&&u<=119){
            return "160";
        }
        else if(u>=120&&u<=139){
            return "260";
        }
        else if(u>=140){
            return "360";
        }
        else
            return "0";
    }

    public A() {}

    @Override
    public int compareTo(A o) {
        return Integer.compare(this.getNumber(), o.getNumber());
    }
}
  1. 对于并联电路的增加,我创建了一个串联电路类,一个并联电路类,先计算总电阻(把并联电路当作主串联电路的一个电路元件)算出总电流,再求出并联电路作为电路元件的电压,该并联电路所包含的小串联电路的电压与其电压相等,各串联电路的电路元件的电压都由电路公式求得(以下展示并联电路类和串联电路类)
点击查看代码
class Parallel{
    private double U;
    private String name;
    private double I;
    private ArrayList<Series> ser=new ArrayList<Series>();

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Parallel() {
    }

    public double getU() {
        return getI()*getR();
    }

    public void setU(double u) {
        U = u;
    }

    public double getR() {
        double r=0;
        for(Series s:getSer()){
            if(s.getState()==1){
                r=r+1/s.getR();
            }
        }
        return 1/r;
    }

    public int getState() {
        int juge=0;
        for(Series s: getSer()){
            if(s.getState()==1){
                juge=1;
                break;
            }
        }
        return juge;
    }
    public double getI() {
        return I;
    }
    public void setI(double i) {
        I = i;
    }
    public ArrayList<Series> getSer() {
        return ser;
    }
    public void setSer(ArrayList<Series> ser) {
        this.ser = ser;
    }
}
class Series{
    private double U;
    private String name;
    private double I;
    private ArrayList<Parallel> par=new ArrayList<>();
    private ArrayList<controlled> ctrd=new ArrayList<>();
    private ArrayList<controll> ctrl=new ArrayList<>();

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Series() {
    }

    public double getU() {
        return U;
    }

    public void setU(double u) {
        U=u;
    }

    public double getR() {
        double r=0;
        for(Parallel p:getPar()){
            r=r+p.getR();
        }
        for(controlled c:getCtrd()){
            r=r+c.getR();
        }
        return r;
    }
    public int getState() {
        for(controll c:getCtrl()){
            if(c instanceof K){
                K k=(K)c;
                if(k.getState()==0){
                    return 0;
                }
            }
        }
        for(Parallel p:getPar()){
            if(p.getState()==0){
                return 0;
            }
        }
        return 1;
    }
    public double getI() {
        return getU()/getR();
    }
    public void setI(double i) {
        I=i;
    }
    public ArrayList<Parallel> getPar() {
        return par;
    }
    public void setPar(ArrayList<Parallel> par) {
        this.par = par;
    }
    public ArrayList<controlled> getCtrd() {
        return ctrd;
    }
    public void setCtrd(ArrayList<controlled> ctrd) {
        this.ctrd = ctrd;
    }
    public ArrayList<controll> getCtrl() {
        return ctrl;
    }
    public void setCtrl(ArrayList<controll> ctrl) {
        this.ctrl = ctrl;
    }
}
  1. 注意事项:最后的输出是按照每个电路元件的序号输出,输入内容的序号是随机的,所以最后要把整个电路的所有电路元件按种类分类并存储,最后根据他们的序号进行输出(对各个记录电路元件的动态数组排序并输出)
点击查看代码
Collections.sort(K_list);
        Collections.sort(D_list);
        Collections.sort(A_list);
        Collections.sort(R_list);
        Collections.sort(B_list);
        for(K k:K_list){
            if(k.getState()==0){
                System.out.println("@" + k.getName() + ":" + "turned on");
            }
            else {
                System.out.println("@" + k.getName() + ":" + "closed");
            }
        }
        for(controll c:main_ser.getCtrl()){
            if(c instanceof L){
                L l=(L)c;
                System.out.println("@" + l.getName() + ":" + l.getstate());
            }
            else if(c instanceof F){
                F f=(F)c;
                System.out.println("@" + f.getName() + ":" + f.getstate());
            }
        }
        for(B b:B_list){
            System.out.println("@" + b.getName() + ":" + b.getstata());
        }
        for(R r1:R_list){
            System.out.println("@" + r1.getName() + ":" + r1.getstata());
        }
        for(D d:D_list){
            System.out.println("@" + d.getName() + ":" + d.getstata());
        }
        for(A a:A_list){
            System.out.println("@" + a.getName() + ":" + a.getstata());
        }

总结与展望

满分100,得分89,衷心希望能够在以后的作业中把所有的测试点都列举出来,或者至少给出提示,这样我们才能知道自己哪里没有考虑到,不然就一直蒙在鼓里不会的还是不会甚至不知从何学起!!

详细/类设计:
image

标签:输出,题目,String,引脚,int,PTA,blog,return,public
From: https://www.cnblogs.com/bokelalala/p/18235639/dongli_20240607

相关文章

  • PTA--《面向对象程序设计》
    目录 一:超市贴花二:教师类三:快递计价器四:重复数据问题五:List的使用 一:超市贴花某超市有一种促销手段,购买金额超过一定阈值就随机给一个贴花。贴花有不同种类的,种类以编号表示,编号是一个1到100之间的数字。当收集到连续编号的三张贴花时,就可以换一个小礼物。输入样例......
  • 第二次Blog
    (1)前言:智能家居是在当下家庭中越来越流行的一种配置方案,它通过物联网技术将家中的各种设备(如音视频设备、照明系统、窗帘控制、空调控制、安防系统、数字影院系统、影音服务器、影柜系统、网络家电等)连接到一起,提供家电控制、照明控制、电话远程控制、室内外遥控、防盗报警、环境......
  • 题目集4~6的总结性Blog
    目录一、前言:总结三次题目集的知识点、题量、难度等情况知识点题目及题量、难度nchu-software-oop-2024-上-4:nchu-software-oop-2024-上-5:nchu-software-oop-2024-上-6:二、第四次的答题判题程序分析设计与分析第四次的答题判题程序类图以及SourceMontor的生成报表内容:踩坑心得......
  • 第二次blog
    一.前言1.题目集4~6的知识点:(1)这几个题目都使用了面向对象编程原理,根据题目给出的信息和题目的复杂程度,建立了对应的类,并在类中添加了方法。通过使用Java自带的类库,如Scanner类中的方法用于接收用户输入,regex.Matcher类中的方法用于正则表达式匹配,regex.Pattern类中的方法用于编......
  • 题目集4-1-2总结
    前言设计与分析2.1第四次迭代设计与分析2.2第一次电路程序2.3第二次电路程序踩坑心得踩坑心得改进建议总结前言这三次程序的编写与之前的略有不同,第四次程序编写是由前三次程序迭代而来,在拥有两次编写迭代程序的经历后,第四次的程序编写并没有耗费......
  • 题目集4-6次总结
    一、前言从大一下学期开始学习Java,到现在接近尾声,已经过去了差不多有三个月,我学习到了很多,对于利用Java语言进行程序的编写也更加熟练,但经过六次的pta大作业,仍让我意识到了我还有许多不足,需要进行改进,以下是我对于题目集4到6次的作业的总结。知识点:三次题目集考察的知识点主......
  • 第二次blog总结
    一、前言:第四次pta作业:1.知识点:考察类的继承,抽象类的使用。2.题量:3道简单题,1道迭代难题。3.难度:这次最后一道题在上次的基础上添加了题目的种类(eg:选择题、填空题)等,难度增加的还行,不算太难也不算太容易。第五次pta作业:1.知识点:考察类实现Comparable接口,重写compareTo......
  • 题目集4~6的总结性Blog
    4~6次大作业总结前言在题目的开始设计好类和结构真的很重要,之前一直上来就开始写,后来就变得吃力,这样不能很好的一次性完成代码,发现应该先设计,在着手编写代码之前,可以先绘制类图,明确每个类的属性和方法,以及它们之间的关系。这有助于构建清晰的代码结构和逻辑,避免在编码过程中陷入......
  • 2024最新华为OD算法题目
    在一个机房中,服务器的位置标识在 n*m 的整数矩阵网格中,1表示单元格上有服务器,0 表示没有。如果两台服务器位于同一行或者同一列中紧邻的位置,则认为它们之间可以组成一个局域网。请你统计机房中最大的局域网包含的服务器个数。输入描述第一行输入两个正整数,n和m,0<n,m<=......
  • 2道寻找回文子串的题目
    题目题目1题目2题目1是将字符串分隔,使得分隔后得到的每个字符串都是回文子串题目2是从字符串里面找到回文子串两道题都可以利用递归来解决//利用双指针判断是否是回文子串boolisre(string&s){ intleft=0; intright-s.size()-1; while(left<=right) {......