【洛谷算法题】P2433-小学数学 N 合一【入门2分支结构】

花无缺

‍博客主页:@花无缺
欢迎 点赞 收藏⭐ 留言 加关注✅!
本文由 花无缺 原创

收录于专栏 【洛谷算法题】


文章目录

  • 【洛谷算法题】P2433-小学数学 N 合一【入门2分支结构】
    • 题目描述
      • 问题 1
      • 问题 2
      • 问题 3
      • 问题 4
      • 问题 5
      • 问题 6
      • 问题 7
      • 问题 8
      • 问题 9
      • 问题 10
      • 问题 11
      • 问题 12
      • 问题 13
      • 问题 14
    • 输入格式
    • 输出格式
    • 样例 #1
      • 样例输入 #1
      • 样例输出 #1
    • 提示
    • 题解
    • 总结
      • problem 1
      • problem 2
      • problem 3
      • problem 4
      • problem 5
      • problem 6
      • problem 7
      • problem 8
      • problem 9
      • problem 10
      • problem 11
      • problem 12
      • problem 13
      • problem 14


【洛谷算法题】P2433-小学数学 N 合一【入门2分支结构】

题目链接:【深基1-2】小学数学 N 合一 - 洛谷

题目描述

问题 1

请输出 I love Luogu!

问题 2

这里有 10 10 10 个苹果,小 A 拿走了 2 2 2 个,Uim 拿走了 4 4 4 个,八尾勇拿走剩下的所有的苹果。我们想知道:

  1. 小A 和 Uim 两个人一共拿走多少苹果?
  2. 八尾勇能拿走多少苹果?

现在需要编写一个程序,输出两个数字作为答案,中间使用空格分开。

问题 3

现在有 14 14 14 个苹果。要均分给 4 4 4 名同学,分不掉的苹果放回冰箱。请问:

  1. 每位同学能分得几个苹果?

  2. 一共分出去多少苹果?

  3. 把几个苹果放回冰箱?

现在需要编写一个程序,输出三个数字作为答案,每个数字一行。

问题 4

现在有 500 500 500 毫升的肥宅快乐水,要均分给 3 3 3 名同学,每位同学可以分到多少毫升?请输出一个数字作为输出。保留 6 6 6 位有效数字,且不使用科学计数法。

问题 5

甲列火车长 260 260 260 米,每秒行 12 12 12 米;乙列火车长 220 220 220 米,每秒行 20 20 20 米,两车相向而行,从两车车头相遇时开始计时,多长时间后两车车尾相离?已知答案是整数。

问题 6

一个长方形长宽分别是 6  cm 6 \text{ cm} 6 cm 9  cm 9 \text{ cm} 9 cm,求它的对角线长度( cm \text{cm} cm)。直接使用 cout 输出。

问题 7

Uim 银行账户里面有 100 100 100 元。经过了下面的操作:

  1. 往里面存了 10 10 10 元;

  2. 购物花掉了 20 20 20 元;

  3. 把里面的钱全部取出。

请在每次操作后输出账户余额,并使用换行符隔开。

问题 8

当半径为 r = 5 r=5 r=5,请输出圆的周长、面积和球体积。取 π = 3.141593 \pi=3.141593 π=3.141593。请直接使用 cout 输出答案,每行一个数字。

问题 9

一只小猴买了若干个桃子。第一天他刚好吃了这些桃子的一半,又贪嘴多吃了一个;第二天他也刚好吃了剩余桃子的一半,贪嘴多吃了一个;第三天他又刚好吃了剩下的桃子的一半,并贪嘴多吃了一个。第四天起来一看,发现桃子只剩下一个了。请问小猴买了几个桃子?

问题 10

洛谷的评测任务是单位时间内均匀增加的。 8 8 8 台评测机 30 30 30 分钟可以刚好把评测队列中的程序评测完毕, 10 10 10 台评测机 6 6 6 分钟可以刚好把评测队列中的程序评测完毕,请问几台评测机可以在 10 10 10 分钟时刚好把评测队列中的程序评测完毕?

问题 11

小 A 跑步速度 5  m/s 5 \text{ m/s} 5 m/s,八尾勇跑步速度 8  m/s 8 \text{ m/s} 8 m/s,八尾勇在小 A 后面 100  m 100 \text{ m} 100 m,他们同时起跑,请问需要多长时间八尾勇可以追上小 A?输出一个数字表示答案,使用 cout 直接输出。

问题 12

大家都知道有 26 26 26 个英文字母,其中 A 是第一个字母。现在请编程求出:

  1. M 是字母表中的第几个字母?
  2. 18 18 18 个字母是什么?

输出一个数字和一个字母,使用换行隔开。

问题 13

小 A 有两块球形橡皮泥,一个半径是 4 4 4,一个半径是 10 10 10。他想把这两块橡皮泥揉在一起,然后塑造成一个正方体,请问这个正方体的棱长是多少?如果结果不是整数,则舍去小数点之后的数字。取 π = 3.141593 \pi = 3.141593 π=3.141593

问题 14

根据咕咕网校的预测,当课程定价为 110 110 110 元时,会有 10 10 10 人报名。如果课程价格每降低 1 1 1 元,就会多 1 1 1 名报名者(反之亦然)。如果希望总共能收到 3500 3500 3500 元学费的话,那么应该定价多少呢?已知本题有两个答案符合要求,则取较小的那一个。如果这个答案不是整数,则需四舍五入精确到整数。

输入格式

输入一个正整数,表示第几个问题。

输出格式

根据所输入的问题编号,输出对应问题的答案。

样例 #1

样例输入 #1

2

样例输出 #1

6 4

提示

请解决以下小学数学题。你可以提交答案,也可以写一个程序。

对于本题来说,如果你不知道怎么输入,也可以这么抄:

#include
// 填上你觉得需要的其他头文件
using namespace std;
int main() {
    int T;
    cin >> T;
    if (T == 1) {
        // 粘贴问题 1 的主函数代码,除了 return 0
        cout << "I love Luogu!";
    } else if (T == 2) {
        // 粘贴问题 2 的主函数代码,除了 return 0
        cout << 2 + 4 << " " << 10 - 2 - 4;
    } else if (T == 3) {
        // 请自行完成问题 3 的代码
    } else if (T == 4) {
        // 请自行完成问题 4 的代码
    } else if (T == 5) {
        // 请自行完成问题 5 的代码
    } else if (T == 6) {
        // 请自行完成问题 6 的代码
    } else if (T == 7) {
        // 请自行完成问题 7 的代码
    } else if (T == 8) {
        // 请自行完成问题 8 的代码
    } else if (T == 9) {
        // 请自行完成问题 9 的代码
    } else if (T == 10) {
        // 请自行完成问题 10 的代码
    } else if (T == 11) {
        // 请自行完成问题 11 的代码
    } else if (T == 12) {
        // 请自行完成问题 12 的代码
    } else if (T == 13) {
        // 请自行完成问题 13 的代码
    } else if (T == 14) {
        // 请自行完成问题 14 的代码
    }
    return 0;
}

题解

import java.util.Scanner;
import java.math.BigDecimal;
import java.math.MathContext;
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int judge = in.nextInt();
        double PI = 3.141593;
        switch (judge) {
            case 1 : System.out.println("I love Luogu!");
            break;
            case 2 : System.out.println(6 + " " + 4);
            break;
            case 3 : System.out.println(14 / 4);
                     System.out.println(4 * (14 / 4));
                     System.out.println(14 % 4);
            break;
            case 4 : 
                    System.out.printf("%.3f",500 / 3.0);
            break;
            case 5 : System.out.println(480 / 32);
            break;
            case 6 : 
                    double number = Math.sqrt(6*6 + 9*9);
                    BigDecimal b = new BigDecimal(String.valueOf(number)); 
                    BigDecimal divisor = BigDecimal.ONE;
                    MathContext mc = new MathContext(6);
                    System.out.println(b.divide(divisor, mc));
            break;
            case 7 : System.out.println(110);
                     System.out.println(90);
                     System.out.println(0);
            break;
            case 8 :
                     System.out.printf("%.4f\n",2 * PI * 5);
                     System.out.printf("%.4f\n",PI * 25);
                     System.out.printf("%.3f",4.0 / 3 * PI * 5 * 5 * 5);
                     break;
            case 9 :
                     System.out.println(fun(3));
            break;
            case 10 :
                     System.out.println(9);
            break;
            case 11 :
                     System.out.printf("%.4f",100 / 3.0);
            break;
            case 12 :
                     System.out.println((int)'M' - 64);
                     System.out.println((char)('A' + 17));
            break;
            case 13 :
                      double A = 4.0 / 3 * PI * 4 * 4 * 4;
                      double B = 4.0 / 3 * PI * 10 * 10 * 10;
                      System.out.printf("%.0f",Math.pow((A + B), 1.0 / 3.0));
            break;
            case 14 :
                      System.out.println(50);
            break;
        }
        in.close();
    }
    public static int fun(int n) {
        int sum = 1;
        for (int i = 1; i <= n; i++) {
            sum = (sum + 1) * 2;
        }
        return sum;
    }
}

总结

从本篇文章开始,我们将进入洛谷官方题单【入门2】分支结构的练习,主要针对我们对于编程语言中分支结构的熟悉和使用。

今天这个题总共有 14 个小问题,我们要根据输入的题号输出对应的结果,显然,这需要采用一个多分支结构来完成。这里,我们使用了 switch 语句来完成多分支语句。接下来我将给大家一一讲解每个题怎么做。

problem 1

一个简单的输出语句。

System.out.println("I love Luogu!");

problem 2

一个简单的数学问题。如果这样的数学题你不会做的话,那么我表示:你很棒,可以重新回小学看望一下你的小学数学老师,你看他打不打你就完了。

System.out.println(6 + " " + 4);

problem 3

一个简单的数学问题。

System.out.println(14 / 4);
System.out.println(4 * (14 / 4));
System.out.println(14 % 4);

problem 4

System.out.printf("%.3f",500 / 3.0);

这个题有一个易错点,保留6位有效数字,不要误认为保留六位有效数字就是保留六位小数。有效数字是指从第一个不为0的数字开始后的数字,而且不算上末尾的 0。

例如:

1.3454位有效数字

0.041位有效数字

0.004533位有效数字

0.7830003位有效数字

Java 保留有效数字的方法

public class Test {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        double number = 0.06789;
        BigDecimal b = new BigDecimal(String.valueOf(number)); 
        BigDecimal divisor = BigDecimal.ONE;
        // 保留几位有效数字就把 2 改成几
        MathContext mc = new MathContext(2);
        System.out.println(b.divide(divisor, mc));

        in.close();
    }
}

problem 5

一个数学行程的问题。此题是一个相遇问题,解题关键点:时间相同,且相遇时和离开时的总距离都是相同的。

直接上公式:

相遇问题:路程和 = 时间 * 速度和

System.out.println(480 / 32);

problem 6

这个就是利用三角形勾股定理来做。利用 Java 的平方根函数sqrt()。但是这个题需要注意一个细节,就是题目中要求使用C++做的话,直接使用cout输出结果,而在C++中cout默认输出浮点数保留 6 位有效数字,所以当我们转换为 Java 语言来做这个题目的时候,我们也要将结果保留 6 位有效数字。

double number = Math.sqrt(6*6 + 9*9);
BigDecimal b = new BigDecimal(String.valueOf(number)); 
BigDecimal divisor = BigDecimal.ONE;
MathContext mc = new MathContext(6);
System.out.println(b.divide(divisor, mc));

problem 7

简单的数学题。

System.out.println(110);
System.out.println(90);
System.out.println(0);

problem 8

直接用公式:

圆的周长:C=2πr
圆的面积:S=πr2
球的体积:V=(4/3)πr3

这个题也同样要求使用cout输出结果,也即要保留 6 位有效数字,我们使用Java做时,也不一定都要按保留有效数字的那个方法来做,有时候太麻烦了,我们可以先看结果有多少位小数,再使用格式控制符保留到 6 位小数就达到了保留 6 位有效数字的目的,如下:

System.out.printf("%.4f\n",2 * PI * 5);
System.out.printf("%.4f\n",PI * 25);
System.out.printf("%.3f",4.0 / 3 * PI * 5 * 5 * 5);

problem 9

从最后一天起往前递推就可以得到第一天的桃子总数,前一天的桃子数等于今天的桃子数加 1 的两倍,就这样循环 n 次,就可以推出第一天的桃子数量。

public static int fun(int n) {
        int sum = 1;
        for (int i = 1; i <= n; i++) {
            sum = (sum + 1) * 2;
        }
        return sum;
    }
System.out.println(fun(3));

problem 10

这个题有个简单的做法,就是所求的数量是在 8 到 10 之间的,而又只能是整数,所以只能是 9;这样就做出来了。

但是还是要看看正确的做法。这是一个牛吃草问题,那么什么是牛吃草问题呢。

例如这样的问题: 牧场上有一片青草,每天都生长得一样快。这片青草供给 10 头牛吃,可以吃 22 天,或者供给 16 头牛吃,可以吃 10 天,期间一直有草生长。如果供给 25 头牛吃,可以吃多少天?

这个题就和本题非常的相似,草每天都在增长,此题中评测速率也在增快

可以列出一个方程组:

x+30y=8×30;
x+6y=10×6;

其中,x是初始的评测时间,y是每分钟的增长量

解得: x = 5;y = 7.5;

则答案等于:(15+7.5×10)÷10= 9 台评测机器。

problem 11

一个简单的追及问题。八尾勇追上小A的总路程 = 小A的路程加上100米

得方程:5t + 100 = 8t => t = 100 / 3

System.out.printf("%.4f",100 / 3.0);

problem 12

利用 ASCII 码来解答,A 的 ASCII 码为 65,根据这个往后推就可以得出结果。

System.out.println((int)'M' - 64);
System.out.println((char)('A' + 17));

problem 13

先算出两个橡皮泥的总体积,再开立方根求出正方体的棱长。

double A = 4.0 / 3 * PI * 4 * 4 * 4;
double B = 4.0 / 3 * PI * 10 * 10 * 10;
System.out.printf("%.0f",Math.pow((A + B), 1.0 / 3.0));

problem 14

用一个一元二次方程组就搞定了

设降价 x 元,售价就为110 + x 元

得方程:

(110 + x1)(10 − x2) = 3500;

解出来得:x1 = 70;x2 = 50;

或者 x1 = 50,x2 = 70;

题目要求要小的那个。

所以输出 50 就OK了。

System.out.println(50);

作者:花无缺(huawuque404.com)


欢迎关注我的博客:花无缺-每一个不曾起舞的日子都是对生命的辜负~
一起进步-刷题专栏:【洛谷算法题】
Java题解同步仓库:https://github.com/huawuque404/Java-solution
往期精彩好文:
【CSS选择器全解指南】
【HTML万字详解】
你们的点赞 收藏⭐ 留言 关注✅
是我持续创作,输出优质内容的最大动力!
谢谢!

你可能感兴趣的:(洛谷算法题,算法,数据结构,java)