写在前面
第一次正经做算法题,先讲一下洛谷新手村-洛谷第一个任务 P1001A+B Problem、P1421小玉买文具、P1425小鱼的游泳时间这三个题的做题心得。
这三个题核心解题思路比较简单,具体解析就不做赘述(新手的我都很容易想到),归纳总结一下这三个题,主要学习三个做算法题的知识点。以下三点在下文中具体说明。
- 知识点一:算法题基本代码格式
- 知识点二:接受单行两个输入数据
- 知识点三:浮点数向下取整
P1001 A+B Problem
解题前思考:
- List item.第一次正经做洛谷的算法题,先了解了一下基本代码要求。
(1)定义的主类必须是Main
(2)import 导入的包必须自己手写打上。(想想IDE真香) - 接受一个数据用Scanner类,我会!!如何接收这同一行两个参数??难道是接收以后在用空格隔离开??难搞哦!!
自己解法:
null
解析:
null
借鉴解答:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc = new Scanner(System.in);
int a=sc.nextInt(),b=sc.nextInt();
System.out.println(a+b);
}
}
分析:
- 如何接受同一行,空格隔开的两个数?
原来是自己nextInt()方法没有学明白,查阅博客,通俗点来说,第一个nextInt()方法就是读取整型数据,一次读一个,读第一个数,第二个nestInt()方法就指向下一个数,就读取到了第二个数。
扩展阅读:
p1421 小玉买文具
解题前思考:
- 这个题核心就是用班主任给小玉的钱数除以一直签字笔的单价。问题来了,可能有除不开的情况,这里就需要向下取整。
- 这里涉及到小数,参数用double类型。
自己解法:(一次通过666)
import java.util.Scanner;
public class Demo02 {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int a=scan.nextInt(),b=scan.nextInt();
double money=a+b*0.1;
double price=1.9;
System.out.println((int)Math.floor(money/price));
}
}
解析:
- Math.floor()方法就是计算结果,向下取整, 求一个最接近它的整数,它的值肯定会小于或等于这个浮点数。注意这个方法里面的参数是浮点数,而且返回的结果也是浮点数,但是题目要求输出一个整数,所以要强转一下,注意一下细节。
P1425 小鱼的游泳时间
解题前思考:
-
这个问题的核心数学运算应该怎么算,找一下规律,发现有两种情况
(1)当开始的时间的分这个数小于等于结束时间的分,例如开始时间:12时15分,结束时间:17时57分,这种情况可以分别相减求出总共游泳的时间。
(2)当开始的时间的分这个数大于结束时间的分,例如开始时间:12时35分,结束时间:17时12分,这种情况时位和分位都需要处理一下,如代码中处理方式。 -
注意输出格式,细节!!
import java.util.Scanner;
public class Demo3 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner scan = new Scanner(System.in);
int a = scan.nextInt();
int b = scan.nextInt();
int c = scan.nextInt();
int d = scan.nextInt();
int e, f;
if (b > d) {
f = 60 - b + d;
e = c - a-1;
} else {
f = d - b;
e = c - a;
}
System.out.println(e+" "+f);
}
}
解析:
null