首页 > 其他分享 >题目集1~3的总结性blog

题目集1~3的总结性blog

时间:2023-03-27 15:33:12浏览次数:52  
标签:知识点 总结性 题目 Scanner 训练 double blog input

一.前言

学期伊始,面向对象的程序设计课程的老师就利用PTA平台陆续发布了三次训练集。

这三次训练集所涉及知识点与课上所学知识点有关,具体知识点如下:

训练集01:此训练集所考察知识点为Java语言的基础语法,其中的要求并无面向对象相关内容,掌握了Java的变量类型与规则以及循环结构和选择结构即可较轻松完成,可见难度为Java的基础了,稍加调试即可拿到高分。正因如此,该题目集的题量较多,但鉴于其难度低,故整体所需时间并不会太长。

训练集02:此训练集所考察知识点与训练集01并无太大差别,不同的是题目7-8与题目7-9中增加了较深层次的知识点考察,如题目7-8中学生需要明白经运算后的浮点数可能存在精度丢失的情况,比较时需指定两者之差不大于某个阈值方可判断为相等;而题目7-9中则稍稍增加了学生对于求下一天日期的算法设计的考察,需要学生具备一定的逻辑思考能力才可胜任。相应的,题量也相对于训练集01减少了不少。

训练集03:此训练集开始,要求中有了“使用类”的要求,也就是说从此开始,我们的题目终于与面向对象沾边了!虽然所考察知识点仍然是面向对象中最简单的部分,但起码我们已经开始探索了面相对象这一“神秘”的概念。观察其中题目的题干,发现题干中已经给出了所需class的结构,我们只需将给出的结构“翻译”成Java语言,再依据之前的知识点写出其中的算法即可。其中题目7-3与题目7-4为同类型的题目,都像训练集02中7-9一样,为日期类设计,这两题也是这三个训练集中最难以解决的题目。

二.设计与分析

      这三个训练集中,我将挑一些我个人认为最值得分析的题目的提交源码并逐一进行分析。

训练集01:

7-1

作为三个训练集中第一个训练集的第一个题目,并不是我们所想的 Hello World 级别,而是实实在在的有特定输入,有输出,还能解决实际问题的有头有脸的一段代码。

题目如下

基本年利率7.7%

  1. 如果一年以内利率给5
  2. 如果三年以内利率为7
  3. 如果五年以内利率为100%
  4. 如果五年以上利率为1.1

输入一个年份,计算这个年份下的实际利率是多少?

我给的代码如下

import java.util.Scanner;

public class Main{
    public static void main(String[] args){
        Scanner input = new Scanner(System.in);
        
        double base = 7.7;
        double rate = 0;
        int year = input.nextInt();
        if(year < 1)rate=0.5;
        else if(year <= 3)rate=0.7;
        else if(year <= 5)rate=1;
        else rate = 1.1;
        
        if(year <= 0) System.out.println("error");
        else System.out.printf("实际利率=%.2f%%",base * rate);
    }
}

 这段代码中,除了固定的input变量用于输入外,我共设置了三个变量:

基础利率basedouble类型

利率的倍数比例ratedouble类型

年份yearint类型

然后使用简单的if - else链后输出即可达到题目要求。

在输出的语句中,为了格式化输出,我使用了System.out.printf()语句。

其中第一个参数"实际利率=%.2f%%"为字符串,含有由该语句定义的两个转义字符串%.2f%%,前者表示转义为一个带有两位小数的浮点数,而由于本身为转义字符串的起始,故若要输出该符号,需使用表示一个百分号的转义字符串%%来进行输出。

 

7-7

在一大堆数据中找出重复的是一件经常要做的事情。现在,我们要处理许多整数,在这些整数中,可能存在重复的数据。

你要写一个程序来做这件事情,读入数据,检查是否有重复的数据。如果有,输出“YES”这三个字母;如果没有,则输出“NO”。

这题如果单论是否能得出正确答案,则其实算法并不算复杂,只需要在输入了一个新字符时将之前的字符全部扫描一遍即可。但若如此,他的时间复杂度将达到O(n2),从而导致倒数第一第二个测试点出现超时的情况,因此我使用了HashMap来记录之前的内容,这样当出现新的数据时,直接看map里有没有就好。

import java.util.*;

public class Main{
    public static void main(String[] args){
        Scanner input = new Scanner(System.in);
        
        int n = input.nextInt();
        
        Map nums = new HashMap();
        for(int i = 0; i < n; i++){
            int num = input.nextInt();
            if(nums.containsKey(num)){
                 System.out.println("YES");
                 return;
            }
            nums.put(num, true);
        }
        System.out.println("NO");
        return;
    }
}

 

训练集02:

7-1 长度质量计量单位换算

长度、质量的计量有多重不同的计算体系,有标准的国际单位制:千克与米,也有各个国家自己的计量方法如:磅、英寸;1磅等于0.45359237千克,1英寸等于0.0254米,请编写程序实现国际单位制与英制之间的换算。

这道题看起来简单,但实际操作过程中却出现了一些问题。

以下是我所提交的源码:

import java.util.Scanner;

public class Main{
    public static void main(String[] args){
        Scanner input = new Scanner(System.in);
        
        double mKg = input.nextDouble();
        double sM = input.nextDouble();
        
        System.out.print((float)(mKg / 0.45359237) + " " + (float)(sM / 0.0254));
        return;
    }
}

可以看到print一行中对于计算结果使用了(float)强制类型转换。或许是因为测试用例中结果是float类型的精度,而计算出来的为double类型的精度,两者存在一定的差异,故若将其删去,总会有一个测试用例无法通过。所以我加上(float)将计算结果强制转换为float类型,从而可通过全部测试用例。

个人认为若不加上(float),代码也既无语法错误也无逻辑错误,而却要为此花费大量时间与精力来调试,有点不值。希望能对此进行优化。

 

 

 

标签:知识点,总结性,题目,Scanner,训练,double,blog,input
From: https://www.cnblogs.com/dreamLXJ/p/17259250.html

相关文章

  • 题目(一)
    这道超级简单的题目没有任何输入。你只需要把这句很重要的话—— ILoveGPLT ——竖着输出就可以了。所谓“竖着输出”,是指每个字符占一行(包括空格),即每行只能有1个字......
  • oop题目集01-03小结
    oop训练集一*计算年利率*身体质量指数测算*九九乘法表(双循环)*快递运费*去掉重复字符*统计一个子串在整串中出现的次数*有重复数据*从一个字符串中移除包含......
  • PTA题目总结
    (1)前言:第一次题目集主要考察JAVA的一些语法知识,比如,控制台的输入,输出时保留两位小数,数组的使用,第十题有点难度,当时没写出来,现在想想 也还好,就是读懂题目有点费劲,第一次题......
  • oop题目集1~3的总结性Blog
    目录一、前言训练集1训练集2训练集3二、设计分析(1)7-3定义日期类(2)7-4日期类设计三、踩坑心得四、改进建议五、总结一、前言从题目集1-3的训练后对java的基本语法有了一......
  • 题目集1~3的总结性Blog
    目录1.前言2.设计与分析3.踩坑心得4.改进建议5.总结 1.前言题目集1:(主要初次了解Java的一些用法)1、计算年利率2、身体质量指数测算3、九九乘法表(双循环)4、快递......
  • java pta三次题目集的总结
    第一次题目集第一次题目集相对比较简单,整体考验的是我们循环和ifelse逻辑判断还有一定的算法基础,比如最后一题:7-12列出最简真分数序列*题目描述:按递增顺序依次列......
  • 题目集1~3的总结性Blog
    题目集1:1、计算年利率2、身体质量指数测算3、九九乘法表(双循环)4、快递运费5、去掉重复字符6、统计一个子串在整串中出现的次数7、有重复数据8、从一个字符串中移除......
  • 前三次题目及集总结
    前言:前三次pta实验让我了解到了基本的java入门知识和基本语法,也让我能够有一定的时间去适应从C语言到java的转变,也让我够感觉到面向过程和面向对象的不同之处,总体来说前......
  • pta前三次题目集的总结
    (1)前言:前三次题目集的题目数目依次递减,但是难度和涉及的知识点逐渐增大和增加。而每个题目集里的难度又增加,三次题目集主要考察了基本数据类型、三种控制结构、字符串Stri......
  • Java学习1-前三次题目集的分析与总结
    一. 前言 作为刚学习JAVA的小白,以下只是本人作为普通学生,以当前能力和状态所做出的总结和分析,不足之处也欢迎各位大佬的指正! 第一和第二次题目集的大部分题目难度较......