算法入门一:顺序结构:

算法入门一:顺序结构:

引言:

​ 在小组的安排下,这个暑假我们统一学习三个星期的算法,在这里让我感觉最大的感受是,前面有人引你入门真的好,可以少走很多的冤枉路,可以快速增长自己的能力和水平,但后续就要求自己自主的学习,因为别人的路线毕竟是别人的,不可能完全的适合自己的,但入门系列是每一个程序员或爱好算法的同学的必经之路,入门系列就是基础阶段,只有将基础打好,后面才能走的更远更好。在完成入门系列专项训练之后,我将自己做的题和做题过程中遇到的问题及解题思路总结成笔记。

​ 记得上数据结构的时候老师说过,数据结构好比是武林高手的内功,往往刚修炼的时候内功比较的弱,但当我们持之以恒的练习,我们终将练就一身内功成就宗师。加油!

顺序结构:

千里之行,始于足下。程序设计虽然花样繁多,但还是要从最简单的地方开始学习,由浅入深,直至掌握。毕竟任何复杂的工程代码都是由一行行简单的代码组成的。

1.洛谷 p5703 java 苹果采购问题:

image-20220124165837647

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);
    }
}

2.洛谷 p5704 java 字母转换问题

image-20220124170121789

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);
    }
}

本题重点:

  • 了解ASCALL表
  • char如何转int类型;int类型如何转char;

3.洛谷 p5706 java 再分肥宅水

image-20220124170909209

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);
    }

}

本题重点:

  • 使用BigDecimal来保留3位小数;
  • 换行符的使用

4.洛谷 p1425 java 小鱼的游泳时间

image-20220124171428555

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);
    }
}

本题重点:

  • 小时和分钟之间的转换,判断分钟,若游泳前的分钟大于游泳后的时间则小时减一,分钟加60.

5.洛谷 p5708 java 三角形面积

image-20220124171916044

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);
    }
}

本地重点:

  • 使用java自带的工具类,Math中的sqrt进行开方
  • 使用format方法将对象格式化为指定模式的字符串 保留一位小数(详细用法请自行查阅)

6.洛谷 p1421 java 小玉买文具

image-20220124172625842

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);
    }
}

本题重点:

  • 为了方便计算,将左右的单位换算成角。
  • 遍历

7.洛谷 p5709 java Apples Prologue / 苹果和虫子

image-20220124192429998

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);
    }
}

本题重点:

  • 当吃完一个苹果的时间为0时,和过去的时间为0时两个特殊的情况需要特殊处理一下。

8.洛谷 p3954 java 成绩

image-20220124193004407

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);

    }
}

这是一道较为简单的计算题,注意转型即可。

9.洛谷 p5707 java 上学迟到,普集题

image-20220124193355108

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);
            }
        }
    }

本题重点:

  • 这里我们要读清除题意,可以提前一天出发,所以有两种情况发生,当天和提前一天。
  • 上向取整,整型计算默认是向下取整。不足的部分也要按时间来计算。
  • printf:这个可以了解一下,在一些题目有输出要求的时候可以使用这个。
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值