在小组的安排下,这个暑假我们统一学习三个星期的算法,在这里让我感觉最大的感受是,前面有人引你入门真的好,可以少走很多的冤枉路,可以快速增长自己的能力和水平,但后续就要求自己自主的学习,因为别人的路线毕竟是别人的,不可能完全的适合自己的,但入门系列是每一个程序员或爱好算法的同学的必经之路,入门系列就是基础阶段,只有将基础打好,后面才能走的更远更好。在完成入门系列专项训练之后,我将自己做的题和做题过程中遇到的问题及解题思路总结成笔记。
记得上数据结构的时候老师说过,数据结构好比是武林高手的内功,往往刚修炼的时候内功比较的弱,但当我们持之以恒的练习,我们终将练就一身内功成就宗师。加油!
千里之行,始于足下。程序设计虽然花样繁多,但还是要从最简单的地方开始学习,由浅入深,直至掌握。毕竟任何复杂的工程代码都是由一行行简单的代码组成的。
AC代码:
import java.io.*; //抛出异常
import java.util.*;//导入工具包
public class Main {
public static void main(String args[]) throws Exception {
Scanner sc=new Scanner(System.in);
int a = sc.nextInt();
int b = sc.nextInt();
System.out.println(a*b);
}
}
AC代码:
import java.io.*;
import java.util.*;
public class Main {
public static void main(String args[]) throws Exception {
Scanner sc = new Scanner(System.in);
String s=sc.nextLine(); // 键盘输入,此处要和nextString区别开;
char ans=s.charAt(0); //获得输入字符串的第一个(0),这里可以了解一下 String.charAt();
int number2=ans-'0';//char转为int类型
int best = number2 - 32; // 在ASCALL中大小写字母之间相差 32 ,
char cNumber= (char) (best+'0'); int --》char型需要强转。
System.out.println(cNumber);
}
}
本题重点:
AC代码:
import java.math.BigDecimal;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
double t = sc.nextDouble();
int n = sc.nextInt();
double t_aver = t/n;
int n_sum = n*2;
//使用BigDecimal来保留三位小数
BigDecimal bd = new BigDecimal(t_aver);
float num =bd.setScale(3,BigDecimal.ROUND_HALF_UP).floatValue();
System.out.println(num+"\n"+n_sum);
}
}
本题重点:
AC代码:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int a = sc.nextInt();
int b = sc.nextInt();
int c = sc.nextInt();
int d = sc.nextInt();
int house = c - a;
int minte = d - b;
if(b > d){ //判断游泳前的分钟时间是否大于游泳后,若是则小时-1,分钟+60
house--;
minte += 60;
}
System.out.println(house+" "+minte);
}
}
本题重点:
AC代码:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
double a = sc.nextDouble();
double b = sc.nextDouble();
double c = sc.nextDouble();
double p = (a+b+c)/2;
double middle = p*(p-a)*(p-b)*(p-c);
double area =Math.sqrt(middle);//使用java自带的工具类,Math中的sqrt进行开方
String num = String.format("%.1f",area);//使用format方法将对象格式化为指定模式的字符串 保留一位小数
System.out.println(num);
}
}
本地重点:
AC代码:
import java.util.Scanner;
public class Main{
public static void main(String[] args) {
int pencil = 19;//将所有单价换算成角进行计算,方便
int count = 0;
Scanner sc = new Scanner(System.in);
int a = sc.nextInt();
int b = sc.nextInt();
int money = a*10 + b;//自己有的总钱数,也按照角进行换算
for (int i = money; i > 0; i -=19) {//遍历,看手中的钱能买几支笔。
count++;
}
System.out.println(count-1);
}
}
本题重点:
AC代码:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int m = scanner.nextInt();//m个苹果
int t = scanner.nextInt();//吃完一个苹果需要花费t分钟
int s = scanner.nextInt();//现在时间过去了 s(s\le 10000)s分钟
int a = 0;//a表示最后存在的苹果数
if (t == 0){//吃完一个苹果需要花费t分钟 不可能发生
a = 0;
}else if (s%t != 0){//规定的时间内吃的苹果数量不是整数,一半的按一个算;
a =m -s/t -1;
if (a<0){ //如果上面的s时0分钟,又-1后是负数,这里手动归零
a=0;
}
}else if (s%t == 0){//规定的时间内吃的苹果数量是整数
a = m - s/t;
if (a<0){//同17行
a=0;
}
}
System.out.println(a);
}
}
本题重点:
AC代码:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int a = sc.nextInt();
int b = sc.nextInt();
int c = sc.nextInt();
int count = (int) (a*0.2+b*0.3+c*0.5);
System.out.println(count);
}
}
这是一道较为简单的计算题,注意转型即可。
AC代码:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
int s=in.nextInt();
int v=in.nextInt();
int time=(int)Math.ceil((float)s/v)+10; //ceil()向上取整
if(time<=480){
time=480-time;
System.out.printf("%02d:%02d",time/60,time%60);
//%02d表示:%:表示格式说明的起始符号,不可缺少
//有0表示指定空位填0,如省略表示指定空位不填。
//④m.n:m指域宽,即对应的输出项在输出设备上所占的字符数。N指精度。用于说明输出的实型数的小数位数。为 指定n时,隐含的精度为n=6位。
}
else{ //在前一天
time=(8+24)*60-time;
System.out.printf("%02d:%02d",time/60,time%60);
}
}
}
本题重点: