第一题:奇怪的捐赠

地产大亨Q先生临终的遗愿是:拿出100万元给X社区的居民抽奖,以稍慰藉心中愧疚。
麻烦的是,他有个很奇怪的要求:
1. 100万元必须被正好分成若干份(不能剩余)。每份必须是7的若干次方元。比如:1元, 7元,49元,343元,...2. 相同金额的份数不能超过5份。3. 在满足上述要求的情况下,分成的份数越多越好!请你帮忙计算一下,最多可以分为多少份?

思路:假如是分成10的n次方,那么就是1,10,100,1000......我们就容易知道,方法是唯一的了(那么每种的份数不能超过9),因此分成7的若干次方方法也是唯一的(每种不能超过6份),题目要求不超过5份,满足不超过6份的条件,因此方法也唯一,那么这道题的解法也就是将金额转换成7进制就可以了。

public class Main
{public static void main(String[] args){// 直接求一个数字的7进制表示// 如果没有函数,可以自己用长除法取余数的方式String s = Integer.toString(1000*1000,7);int sum=0;for(int i=0; i<s.length(); i++){sum += s.charAt(i)-'0';}System.out.println(s);System.out.println("result=" + sum);}
}

第二题:天平称重

用天平称重时,我们希望用尽可能少的砝码组合称出尽可能多的重量。
如果只有5个砝码,重量分别是1,3,9,27,81
则它们可以组合称出1到121之间任意整数重量(砝码允许放在左右两个盘中)。本题目要求编程实现:对用户给定的重量,给出砝码组合方案。
例如:
用户输入:
5
程序输出:
9-3-1
用户输入:
19
程序输出:
27-9+1要求程序输出的组合总是大数在前小数在后。
可以假设用户的输入的数字符合范围1~121。

思路:这个题首先可以暴力,五层循环,每次都判断是放左放右还是不放

1: 1
2: 3-1
3: 3
4: 3+1
5: 9-3-1

递归解法:通过观察,5>9/2,可以总结出啥时候用减法,5=9-4,4=3+1,找到入口

数学解法:假如..只放一个盘,1,2,4,8,... 二进制,那么转换为只有0和1 的数字,0 代表不放,1代表放,这样就可以想到三进制,三进制只有0,1,2,那么问题又来了,0,1,2代表什么呢?如果是-1,0,1那就简单多了,那么我们就将2变成-1,看下图:

通过这样的方式,我们成功把一个数变成了特殊的三进制表示。

递归解法:

public class Main
{public static void main(String[] args){for(int i=1;i<=121;++i){System.out.println(i+":"+f(i));}}//只要超过了一半就要用减法 eg:2超出了3的一半,5超出了9的一半,14超出了27的一半static String f(int x){int a = 1; //最小单位while(a<x)   a *= 3;if(a == x)    return ""+a;              //eg:3if(x<=a/2)    return a/3 + "+" + f(x-a/3); //eg:4return a + reve(f(a-x));                 //eg:5}//正负变号static String reve(String s){s = s.replace("-", "#");s = s.replace("+", "-");s = s.replace("#", "+");return "-"+s;}
}

进制解法:

public class Main
{public static void main(String[] args){for(int i=1;i<=121;++i){System.out.println(i+":"+f(i));}}static String f(int x){String s = "";int q = 1; //权重,代表砝码为1,3,9,27......while(x>0){int sh = x/3; //商if(x%3 == 1)  s = "+" + q + s;if(x%3 == 2){sh++;s = "-" + q + s;}x = sh;q *= 3;}return s.substring(1); //舍弃第一个字符(即正号)}
}

第三题:尼姆堆

有3堆硬币,分别是3,4,5
二人轮流取硬币。
每人每次只能从某一堆上取任意数量。
不能弃权。
取到最后一枚硬币的为赢家。求先取硬币一方有无必胜的招法。

思路:模2加法

1+1=0, 1+0=1, 0+1=1, 0+0=0

可以暴力求解法

第四题:公约公倍

如果两个数很大,怎样求最大公约数,最小公倍数?
如果是n个数呢?比如1000个数的最小公倍数

关键:算数基本定理:质因数分解的唯一性,即:每个比1大的正整数要么本身是一个素数要么可以写成一系列素数的乘积如果不考虑这些素数的在乘积中的顺序那么写出来的形式是唯一的 ,例如:14=2*7,21=3*7。

PS:欧几里得定理:gcd(a,b) = gcd(b,a%b),对a和b求最大公约数就相当于求b与(a%b)求最大公约数

原理:如果一个数n可以除开A,B,那么也一定可以除开A-B,A+B,(假设一堆苹果一堆梨,苹果可以按每堆x个正好分开,梨也可以按每堆x个正好分开,那么当其二者混在一起自然也可以按每堆x个分开,因此当一个数m可以除开A,A+B时,我们可以得到其也可以除开B,在这里我们把A+B看作A,把之前的A看作B,可以得知n也可以除开A-B,同理,n也就可以除开A-B-B,A-B-B-B...就相当于A%B)

重要公式:

最小公倍数 = 乘积 / 最大公约数
(40=5*2^3  28=7*2^2 ... 公共的部分是 2^2)
public class Main
{public static void main(String[] args){System.out.println("最大公约数: "+gcd(60,42));System.out.println("最小公倍数: "+lcm(60,42));}//最大公约数static int gcd(int x,int y){  //前者一定为较大的数if(y == 0) return x; //!!!return gcd(y,x%y);}//最小公倍数static int lcm(int x,int y){return (x*y)/gcd(x,y);}
}

第五题:一步之遥

从昏迷中醒来,小明发现自己被关在X星球的废矿车里。
矿车停在平直的废弃的轨道上。
他的面前是两个按钮,分别写着“F”和“B”。小明突然记起来,这两个按钮可以控制矿车在轨道上前进和后退。
按F,会前进97米。按B会后退127米。
透过昏暗的灯光,小明看到自己前方1米远正好有个监控探头。
他必须设法使得矿车正好停在摄像头的下方,才有机会争取同伴的援助。
或许,通过多次操作F和B可以办到。矿车上的动力已经不太足,黄色的警示灯在默默闪烁...
每次进行 F 或 B 操作都会消耗一定的能量。
小明飞快地计算,至少要多少次操作,才能把矿车准确地停在前方1米远的地方。请填写为了达成目标,最少需要操作的次数。

思路:扩展欧几里得定理:Ax + By = gcd(A,B) 有解

注意第三行:A/B是个整数,因此后面要带上A%B

第六题:有理数运算

如果求 1/2 + 1/3 + 1/4 + 1/5 + 1/6 + .... + 1/100 = ?要求绝对精确,不能有误差。

思路:方法一:BigDecimal(高精度浮点数)

方法二:一个有理数加减乘除有理数得到的还是有理数

图写错了,前面应该是加法

第七题: 素数表

第1个素数是2,第2个素数是3,...
求第100002(十万零二)个素数

思路:关键问题,数组要开多大

蓝桥第四课《数学知识的运用》相关推荐

  1. AcWing基础算法课Level-2 第四讲 数学知识

    AcWing基础算法课Level-2 第四讲 数学知识 您将学会以下数学名词 质数,试除法,埃式筛法,线性筛,辗转相除,算术基本定理,质因数分解,欧拉函数,快速幂,费马小定理,逆元,拓展欧几里得,一次 ...

  2. 算法基础课——第四章 数学知识(三)

    第四章 数学知识(三) 如无特殊说明,所有数均为正整数. 高斯消元 高斯消元是用来解方程的,可以在 O(n3)O(n^3)O(n3)​ 时间复杂度内求解一个 nnn 个方程 nnn 个未知数 的多元线 ...

  3. 算法基础课——第四章 数学知识(一)

    第四章 数学知识(一) 如无特殊说明,所有数均为正整数 质数 质数: 针对所有大于 111​​​ 的自然数来说,如果只包含 111​​ 和本身 这两个约数,就被称为质数,或者叫素数:否则被称为 合数. ...

  4. 算法提高课-数学知识-矩阵乘法-AcWing 1303. 斐波那契前 n 项和:矩阵乘法,快速幂,线性代数

    题目分析 来源:acwing 分析: 先利用矩阵运算的性质将通项公式变成幂次形式,然后用快速幂的方法求解第 n项. 斐波那契数列的递推公式:f1=f2=1,fn=fn−2+fn−1(n≥3)f_1 = ...

  5. 第四章 数学知识【完结】

    本文的所有内容模板都来自于y总 目录 试除法判定质数 试除法分解质因数 朴素筛法求素数 埃氏筛法求素数 线性筛法 试除法求所有约数 约数个数和约数之和 欧几里得算法 求欧拉函数 筛法求欧拉函数 [不熟 ...

  6. 第四章 数学知识 质数相关

    1.质数判定 1. 问题解释 所谓质数判定,就是给定一个数,判断一下该数是否为质数. 质数(Prime number),又称素数,指在大于1的自然数中,除了1和该数自身外,无法被其他自然数整除的数(也 ...

  7. 算法基础课-数学知识

    数学知识 第四章 数学知识 数论 质数 约数 欧拉函数 欧拉定理与费马小定理 拓展欧几里得定理 裴蜀定理 中国剩余定理 快速幂 高斯消元 求组合数 卡特兰数 容斥原理 博弈论 Nim游戏 SG函数 第 ...

  8. 单价数量和总价的公式_人教版四年级数学上册单价、数量和总价之间的关系微课...

    温馨提示:若有视频需付费才可打开,请您不予理会跳过看其它视频 微课1 微课2 (点开下面链接即可查看) 2020年秋季1-9年级学生课本上册全套多版本电子版都在这了 部编小学语文1-6年级上册全册优质 ...

  9. 第四课 脱壳必备知识要点及方法

    第四课  脱壳必备知识要点及方法 今天所要讲的是这高级篇中最为关键,最为重要的一课,希望大家能认真学习,反复推敲,举一反三学习脱壳的各种方法,当然有的时候可能需要几种方法一起使用,今后我们也会一点一点 ...

最新文章

  1. Android适配全面总结(二)
  2. FreeOTP可以用作谷歌认证的替代
  3. 算法三:无重复字符的最长子串
  4. 单片机/嵌入式软件架构分层思想
  5. Java String startsWith()方法与示例
  6. 部分网卡安装esxi6.7报错“Shutting down firmware services…解决方法
  7. mysql获取当前时间的订单_mysql获取当前时间,及其相关操作
  8. SQL语句导致性能问题
  9. Excel数据透视表中的值计算
  10. Chrome 安装Axure 插件
  11. 如何进行大文件传输?
  12. ERROR: canceling statement due to conflict with recovery
  13. 计算机打字声音,键盘打字声音在哪设置
  14. Yet Another Crosses Problem
  15. 【SOJ 385】旅馆
  16. HyperV Windows系统端口转发给主机 2021-12-13
  17. java 几分钟前几小时前几天前后转化为时间
  18. 【自动控制理论(三)】频率特性
  19. 手机工行显示服务器,工行手机银行服务器安全证书验证失败
  20. 报警c语言程序,单片机C语言程序设计:报警与旋转灯

热门文章

  1. 网络基础2(下):IP协议与MAC帧
  2. Go语言自学系列 | golang方法
  3. netflix怎么上_如何在使用它的每台设备上注销Netflix帐户
  4. OpenXml操作Word的一些操作总结.无word组件生成word.
  5. jsp mysql完整注册登陆_JSP+MySQL最简单的登录和注册的实现 --Java Web温习
  6. 一套详细的安卓软件反编译教程
  7. eclipse插件导出失败
  8. 计算机组成原理考试简答题
  9. 2013年10月微软MVP当选名单揭晓!
  10. django开发: 富文本编辑器TinyMCE的默认字体大小及一键排版功能