【蓝桥杯日记】复盘篇三——循环结构

 前言

   本篇内容是对循环结构进行复盘的,循环可谓是在基础阶段特别重要的东西,是三大结构(顺序结构、选择结构、循环结构)中最重要的结构之一。

目录

🍑1.找最小值

分析:

知识点:

代码如下

🍊2.打分

分析:

知识点:

代码如下

🍎3.质数口袋

分析:

知识点:

代码如下

🍅4.阶乘之和

分析:

知识点:

代码如下

总结


🍑1.找最小值

题目描述

给出 n 和 n 个整数,求这 n 个整数中最小值是什么。

输入格式

第一行输入一个正整数 n,表示数字个数。

第二行输入 n 个非负整数,表示 a1​,a2​…an​,以空格隔开。

输出格式

输出一个非负整数,表示这 n 个非负整数中的最小值。

输入输出样例

输入 #1

8
1 9 2 6 0 8 1 7

输出 #1

0

说明/提示

数据保证,n≤100 且 0≤an≤1000。

分析:
  1. 使用数组来接收输入的n个值。
  2. 设置一个最小值min=0,由于题目说的是输入的是非负整数,故是等于0的。
  3. 执行n次循环每次判断数组中的数值是否比min中的数值小,如果小于则对min中的数值进行替换。
  4. 最后输入min中的数值
知识点:
  • 使用数组对大量相同类型的数值进行存储。
代码如下
   Scanner sc=new Scanner(System.in);
        int n=sc.nextInt();
        int arr[]=new int[n];
        for (int i = 0; i < n; i++) {
            arr[i]=sc.nextInt();
        }
//        求最小值
        int min=0;
        for (int i=1;i<arr.length;i++){
            if(arr[min]>arr[i])
                min=i;
        }
        System.out.println(arr[min]);

🍊2.打分

题目描述

现在有n(n≤1000) 位评委给选手打分,分值从 0到 10。需要去掉一个最高分,去掉一个最低分(如果有多个最高或者最低分,也只需要去掉一个),剩下的评分的平均数就是这位选手的得分。现在输入评委人数和他们的打分,请输出选手的最后得分,精确到 2 位小数。

输入格式

第一行输入一个正整数 n,表示有 n 个评委。

第二行输入 n 个正整数,第 i 个正整数表示第 i 个评委打出的分值。

输出格式

输出一行一个两位小数,表示选手的最后得分。

输入输出样例

输入 #1

5
9 5 6 8 9

输出 #1

7.67

说明/提示

数据保证,3≤n≤1000,每个评委打出的分值为为 0到 10(含 0 与 10)之间的整数。

分析:
  1. arr数组保存裁判的打分,使用sum进行对裁判的打分进行累加。
  2. Arrays类的sort方法进行对数组中的内容进行从小到大的排序,这样直接取出最小值arr[0]和最大值arr[arr.length-1]
  3. 累加和sum减去最大值和最小值,除以评委的个数n减去2为最大值和最小值。
  4. 使用字符串格式化函数String.format()进行保留小数位数,如果不明白字符串格式化语句可以去看一下复盘篇二
知识点:
  •   本题设计的知识点,之前的篇幅已经说过了。
代码如下
import java.util.Arrays;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        int n=sc.nextInt();
        int arr[]=new int[n];
        double sum=0;
        for (int i = 0; i < arr.length; i++) {
            arr[i] = sc.nextInt();
            sum+=arr[i];
        }
        Arrays.sort(arr);
        System.out.println(String.format("%.2f",(sum-arr[0]-arr[arr.length-1])/(n-2)));
    }
}

🍎3.质数口袋

题目描述

小 A 有一个质数口袋,里面可以装各个质数。他从 2 开始,依次判断各个自然数是不是质数,如果是质数就会把这个数字装入口袋。

口袋的负载量就是口袋里的所有数字之和。

但是口袋的承重量有限,装的质数的和不能超过 L。给出 L,请问口袋里能装下几个质数?将这些质数从小往大输出,然后输出最多能装下的质数的个数,数字之间用换行隔开。

输入格式

一行一个正整数 L。

输出格式

将这些质数从小往大输出,然后输出最多能装下的质数个数,所有数字之间有一空行。

输入输出样例

输入 #1

100

输出 #1

2
3
5
7
11
13
17
19
23
9

输入 #2

5

输出 #2

2
3
2

输入 #3

11

输出 #3

2
3
5
3

说明/提示

数据保证,1≤L≤105。

分析:
  1. 使用count进行基数,使用sum来进行记录当前素数的总数即本题中的质量。
  2. 判断是否为素数,如果为素数则进行则进行累加且判断是否超出了质量,超出了质量则循环结束。
知识点:
  • 素数的概念:是指在大于1的自然数中,除了1和它本身以外不再有其他因数的数。例如,2、3、5、7、11、13、17、19、23等都是素数。
  • 我们可以使用枚举的方法来判断是否为素数,代码中的trial()函数就是用来判断素数的。偶数一定不为素数除了2,使用for循环进行判断是否能够被其他数值整除,如果可以则不是素数,反之则是。
  • 我们只需要除到自身的平方根。
代码如下
import java.util.Scanner;
public class Main{
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
//        装入的容量
        int n = sc.nextInt();
//        记录可以装入的个数
        int count = 0;
//        当前的累加和
        int sum = 0;
//        素数的初始值
        int i = 2;
        while (true) {
            if (trial(i)) {
                if (sum + i <= n) {
                    System.out.println(i);
//                  累加sum
                    sum += i;
//                  count累加
                    count++;
                } else {
                    break;
                }
            }
//            控制i的增加
            i++;
        }
        System.out.println(count);
    }

    //    判断素数
    static boolean trial(int x) {
        if (x % 2 == 0 && x != 2)
            return false;
        for (int i = 2; i <= Math.sqrt(x); i++) {
            if (x % i == 0)
                return false;
        }
        return true;
    }
}

🍅4.阶乘之和

题目描述

用高精度计算出 !S=1!+2!+3!+⋯+n!(n≤50)。

其中 ! 表示阶乘,定义为n!=n×(n−1)×(n−2)×⋯×1。例如5!=5×4×3×2×1=120。

输入格式

一个正整数 n。

输出格式

一个正整数 S,表示计算结果。

输入输出样例

输入 #1

3

输出 #1

9

说明/提示

【数据范围】

对于 100%的数据,1≤n≤50。

分析:

本题要求是求出n的阶乘,由于int型和long型无法满足题目给出的要求,如果贸然使用会出现溢出的情况。

我们就需要使用java中的高精度类型BigInteger类,进行阶乘的操作。

知识点:

BigInteger类常用的方法:

  • abs() 返回一个BigInteger,它的值是此BigInteger的绝对值。
  • add(BigInteger val) 返回值为 (this + val) 。
  • compareTo(BigInteger val) 将此BigInteger与指定的BigInteger进行比较。 
  • divide(BigInteger val) 返回值为 (this / val) 。 
  • multiply(BigInteger val) 返回值为 (this * val) 。 
  • modInverse(BigInteger m) 返回值为 (this  mod m) 。  
  • subtract(BigInteger val) 返回值为 (this - val) 。 

 BigInteger类静态常量:

  • ZERO BigInteger常数为零。
  • ONE BigInteger常数一。
  • TEN BigInteger常数十。
代码如下
import java.math.BigInteger;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        BigInteger sum=new BigInteger("0");
        int n=sc.nextInt();
        BigInteger result=new BigInteger("1");
        for (int i = 1; i <= n; i++) {
            result=result.multiply(new BigInteger(String.valueOf(i)));
            sum=sum.add(result);
        }
        System.out.println(sum);
    }

}

总结

 本篇的复习要点:

  1.   for循环和while循环体的基本结构。
  2.   素数的判断方法。
  3.   高精度BigInteger类的使用。
  • 63
    点赞
  • 53
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 44
    评论
项目:使用 JavaScript 编写的杀死幽灵游戏(附源代码) 杀死鬼魂游戏是使用 Vanilla JavaScript、CSS 和 HTML 画布开发的简单项目。这款游戏很有趣。玩家必须触摸/杀死游荡的鬼魂才能得分。您必须将鼠标悬停在鬼魂上 - 尽量得分。鬼魂在眨眼间不断从一个地方移动到另一个地方。您必须在 1 分钟内尽可能多地杀死鬼魂。 游戏制作 这个游戏项目只是用 HTML 画布、CSS 和 JavaScript 编写的。说到这个游戏的特点,用户必须触摸/杀死游荡的幽灵才能得分。游戏会根据你杀死的幽灵数量来记录你的总分。你必须将鼠标悬停在幽灵上——尽量得分。你必须在 1 分钟内尽可能多地杀死幽灵。游戏还会显示最高排名分数,如果你成功击败它,该分数会在游戏结束屏幕上更新。 该游戏包含大量的 javascript 以确保游戏正常运行。 如何运行该项目? 要运行此游戏,您不需要任何类型的本地服务器,但需要浏览器。我们建议您使用现代浏览器,如 Google Chrome 和 Mozilla Firefox。要玩游戏,首先,单击 index.html 文件在浏览器中打开游戏。 演示: 该项目为国外大神项目,可以作为毕业设计的项目,也可以作为大作业项目,不用担心代码重,设计重等,如果需要对项目进行修改,需要具备一定基础知识。 注意:如果装有360等杀毒软件,可能会出现误报的情况,源码本身并无病毒,使用源码时可以关闭360,或者添加信任。
javascript 中的 Paint War Game 是使用 HTML、CSS 和 JavaScript 开发的。谈到游戏玩法,这款游戏的主要目标是建造比敌人更多的油漆砖。您所要做的就是使用 WASD 键输入玩家的动作。您可以使用 VS Code 来运行该项目。 关于项目 每次您的玩家走过一块瓷砖时,它都会被涂成您的团队颜色。您必须在同一块瓷砖上走 4 次才能获得更多游戏点数。瓷砖会被您的团队挡住,并且不能再被偷走。如果您走过另一支球队的瓷砖,它会像您第一次走过时一样被涂上颜色。如果您创建一个封闭的被阻挡瓷砖图形,图形内所有未被阻挡的瓷砖都将固定为您的团队颜色。这个游戏充满乐趣,创造和重新即兴发挥会更有趣。 要运行此项目,我们建议您使用现代浏览器,例如 Google Chrome、  Mozilla Firefox。该游戏可能还支持 Explorer/Microsoft Edge。 演示: javascript 中的 Paint War Game 是使用 HTML、CSS 和 JavaScript 开发的。谈到游戏玩法,这款游戏的主要目标是建造比敌人更多的油漆砖。您所要做的就是使用 WASD 键输入玩家的动作。您可以使用 VS Code 来运行该项目。 关于项目 每次您的玩家走过一块瓷砖时,它都会被涂成您的团队颜色。您必须在同一块瓷砖上走 4 次才能获得更多游戏点数。瓷砖会被您的团队挡住,并且不能再被偷走。如果您走过另一支球队的瓷砖,它会像您第一次走过时一样被涂上颜色。如果您创建一个封闭的被阻挡瓷砖图形,图形内所有未被阻挡的瓷砖都将固定为您的团队颜色。这个游戏充满乐趣,创造和重新即兴发挥会更有趣。 要运行此项目,我们建议您使用现代浏览器,例如 Google Chrome、  Mozilla Firefox。该游戏可能还支持 Explorer/Microsoft Edge。 演示: 该项目为国外大神项目,可以作为毕业设计的项目,也可以作为大作业项目,不用担心代码重,设计重等,如果需要对项目进行修改,需要具备一定基础知识。 注意:如果装有360等杀毒软件,可能会出现误报的情况,源码本身并无病毒,使用源码时可以关闭360,或者添加信任。
评论 44
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Super大雄

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值