A(填) 阶乘位数

蒜头君对阶乘产生了兴趣,他列出了前 10 个正整数的阶乘以及对应位数的表:

对于蒜头君来说,再往后就很难计算了。他试图寻找阶乘位数的规律,但是失败了。现在请你帮他计算出第一个正整数的阶乘位数大于等于 10000 的数是多少,即求最小的正整数 n 满足 n! 的位数大于等于 10000。

方法一:BigInteger 阶乘

import java.util.*;
import java.math.*;
import java.io.*;
public class Main{public static void main(String[] args) throws IOException {  Scanner sc = new Scanner(new BufferedInputStream(System.in));PrintWriter pw = new PrintWriter(System.out, true); //自动刷新BigInteger one = BigInteger.ONE;BigInteger sum = BigInteger.ONE;BigInteger num = BigInteger.valueOf(1);int len = 0;while (len < 10000) {num = num.add(one);sum = sum.multiply(num);len = sum.toString().length();}pw.println(num);}
}

方法二:斯特林公式

ln(N!)=ln(1)+ln(2)+...+ln(N−1)+ln(N)ln(N!) = ln(1) + ln(2) + ... + ln(N-1) + ln(N)ln(N!)=ln(1)+ln(2)+...+ln(N−1)+ln(N) 可以求出 N!N!N! 的阶乘位数

import java.util.*;
import java.math.*;
import java.io.*;
public class Main{public static void main(String[] args) throws IOException {  Scanner sc = new Scanner(new BufferedInputStream(System.in));PrintWriter pw = new PrintWriter(System.out, true); //自动刷新int res = 0; double sum = 0;          //注:变量类型for (int i = 1; ; i++) {sum += Math.log10(i);if (sum >= 10000) {res = i;break;}}pw.println(res + " ");}
}

答案:3249


B(填) 炮台实验

方法一:递推

思路

  • 第 1 高的炮台对期望的贡献值为 1,因为它放在那里都不会挂。
  • 第 2 高的炮台对期望的贡献值为 12\cfrac{1}{2}21​。
    • 放在第 1 高的左边不会挂。
    • 放在第 1 高的右边不挂了。
  • 第 3 高的炮台对期望的贡献值为 13\cfrac{1}{3}31​。
    • 放在第 1 和 2 高炮台的中间。
    • 放在第 1 和 2 高炮台的两边。

以此类推,问题转化为:sum(sum(sum( 1第n高的炮台的插入位置\cfrac{1}{第\ n\ 高的炮台的插入位置}第 n 高的炮台的插入位置1​)))

import java.util.*;
import java.math.*;
import java.io.*;
public class Main{public static void main(String[] args) throws IOException {  Scanner sc = new Scanner(new BufferedInputStream(System.in));PrintWriter pw = new PrintWriter(System.out, true); //自动刷新double sum = 0;for (int i = 1; i <= 2019; i++) {sum += 1.0 / i;}pw.println(String.format("%.4f", sum));}
}

* 遗忘问题:又忘记了如何输出指定位数的小数。

  • String.format("%.4f", sum)

答案:8.1878


C(填) 马的管辖

在中国象棋中,马是走日字的。一个马的管辖范围指的是当前位置以及一步之内能走到的位置,下图的绿色旗子表示马能走到的位置。

如果一匹马的某个方向被蹩马脚,它就不能往这个方向跳了,如下图所示,海星的位置存在旗子,马就不能往上跳到那两个位置了:

那么问题来了,在一个 n×mn×mn×m 的棋盘内,如何用最少的马管辖住所有 n×mn×mn×m 个格子。比如 n=m=3n=m=3n=m=3 时,最少要用 5 只马才能管辖所有棋盘,一种可能的方案如下:

当 n=m=5n=m=5n=m=5 时,请你求出用最少马管辖的 方案个数

方法一:


答案:

复杂度分析

  • 时间复杂度:O()O()O(),
  • 空间复杂度:O()O()O(),

D(填) 修建公路

蒜头国有 n 座城市,编号分别为 0,1,2,3,…,n−1。编号为 x 和 y 的两座城市之间如果要修高速公路,必须花费 x∣y 个金币,其中 | 表示二进制按位或。

吝啬的国王想要花最少的价格修建高速公路,使得所有城市可以通过若干条高速公路互相达到。现在请你求出 n=2019 时,一共有多少不同的方案,能让所有城市连通并且造价最低。方案数可能很大,你只需输出对 109+710^9+7109+7 取模的结果。

方法一:


答案:

复杂度分析

  • 时间复杂度:O()O()O(),
  • 空间复杂度:O()O()O(),

E(填) 欧拉函数


F(设) 掎角之势

在《亮剑》中,李云龙发动的平安战役不仅把晋西北搅成一锅粥,还成为了第二次世界大战的转折点。

晋绥军 358 团楚云飞得到探报,有大批日军向平安县城移动,于是他准备帮帮场子。友军在平安附近有三个团的兵力,分别是李云龙的独立团,丁伟的新一团,孔捷的新二团,他们三人互成掎角之势。

作为黄埔军校毕业生的楚云飞,对自己的数学非常自信。在研究了友军的防区分布后,想知道李云龙、丁伟、孔捷这三人指挥部位置所形成的三角形的内切圆和外接圆的面积。因为他们的位置是不断变化的,每次重新算一遍很麻烦,想请你编程帮忙来计算。

本题答案不唯一,符合要求的答案均正确.

样例输入
4
0 3 4 0 0 0
0 0 10 10 -10 -10
3 3 5 3 3 5
0 0 -5 -10 5 -10样例输出
3.1415926536 19.6349540849
NO SOLUTION
1.0780241689 6.2831853072
29.9995403716 122.7184630309

方法一:


复杂度分析

  • 时间复杂度:O()O()O(),
  • 空间复杂度:O()O()O(),

G(设) 轻重搭配


H(设) 忽明忽暗


尝试一:枚举(30%)

-1 表示暗的,1 表示亮的。数据太大,O(n2)O(n^2)O(n2) 算法承受了。

import java.util.*;
import java.math.*;
import java.io.*;
public class Main{public static void main(String[] args) throws IOException { int MOD = (int)1e9 + 7;Scanner sc = new Scanner(new BufferedInputStream(System.in));PrintWriter pw = new PrintWriter(System.out, true); //自动刷新int N = sc.nextInt();long[] arr = new long[N+1];Arrays.fill(arr, -1);for (int i = 1; i <= N; i++) {for (int j = i; j <= N; j+=i)arr[j] = -arr[j];}long sum = 0;for (int i = 1; i <= N; i++) {if (arr[i] > 0) {sum += i;sum %= MOD;}}pw.println(sum);}
}

尝试二:找规律(C++ 60% | java 30%)

先暴力打一下表,结果发现:

  • 当 N = 100 时,最后亮着的灯的编号为:1 4 9 16 25 36 49 64 81 100
  • 当 N = 100 时,最后亮着的灯的编号为:1 4 9 16 25 36 49 64 81 100 121 144 169 196

最后亮着的灯编号之和 = 小于等于 N 的平方数之和。

import java.util.*;
import java.math.*;
import java.io.*;
public class Main{public static void main(String[] args) throws IOException { int MOD = (int)1e9 + 7;Scanner sc = new Scanner(new BufferedInputStream(System.in));PrintWriter pw = new PrintWriter(System.out, true); //自动刷新int N = sc.nextInt();long sum = 0;for (long i = 1; i * i <= N; i++) {sum += i*i;}pw.println(sum % MOD);}
}
import java.util.*;
import java.math.*;
import java.io.*;
public class Main{public static void main(String[] args) throws IOException { int MOD = (int)1e9 + 7;Scanner sc = new Scanner(new BufferedInputStream(System.in));PrintWriter pw = new PrintWriter(System.out, true); //自动刷新int n = sc.nextInt();n = (int)Math.sqrt(n);long sum = n*(n+1)*(2*n+1)/6 % MOD;pw.println(sum);}
}

* 超时:不清楚为何 java 只能过 30%,不过这不要紧,这帮我们找到了出发点,其实可以用求平方和公式 n×(n+1)×(2n+1)/6n × (n+1) × (2n+1) /6n×(n+1)×(2n+1)/6 代替迭代。


I(设) 人以群分

方法一:


复杂度分析

  • 时间复杂度:O()O()O(),
  • 空间复杂度:O()O()O(),

J(设) 势能之和

方法一:


复杂度分析

  • 时间复杂度:O()O()O(),
  • 空间复杂度:O()O()O(),

【模拟赛】2019 蓝桥杯省赛 A 组模拟赛(一)相关推荐

  1. 2018蓝桥杯省赛java_蓝桥杯2018年A组省赛

    1.分数 1/1 + 1/2 + 1/4 + 1/8 + 1/16 + - 每项是前一项的一半,如果一共有20项, 求这个和是多少,结果用分数表示出来. 类似: 3/2 当然,这只是加了前2项而已.分 ...

  2. 2020年 第11届 蓝桥杯 C/C++ B组 省赛真题详解及小结【第1场省赛2020.7.5】【Java版】

    蓝桥杯 Java B组 省赛真题详解及小结汇总[2013年(第4届)~2020年(第11届)] 注意:部分代码及程序 源自 蓝桥杯 官网视频(历年真题解析) 郑未老师. 2013年 第04届 蓝桥杯 ...

  3. 2015年第六届蓝桥杯C/C++B组省赛题目解析

    1.奖券数目 有些人很迷信数字,比如带"4"的数字,认为和"死"谐音,就觉得不吉利. 虽然这些说法纯属无稽之谈,但有时还要迎合大众的需求.某抽奖活动的奖券号码是 ...

  4. 2019年第十届蓝桥杯C/C++ A组国赛赛后总结(北京旅游总结)

    听说蓝桥杯挺水,几个同学一块儿报了省赛准备打着玩玩(Java C/C++ A B组都有).我报的是C/C++A组. 好,省赛一结束,一等奖前排...但是只有两个同C/C++A组的同学也是省一,不过都是 ...

  5. 蓝桥杯c语言a组省赛试题及答案,2016-蓝桥杯-省赛-C语言大学A组全部真题.doc

    第七届蓝桥杯大赛个人赛省赛真题(软件类) C/C++ 大学A组 考生须知: 考试开始后,选手首先下载题目,并使用考场现场公布的解压密码解压试题. 考试时间为4小时.时间截止后,提交答案无效. 在考试强 ...

  6. 第九届蓝桥杯c/c++A组省赛题解

    分数 题目 1/1 + 1/2 + 1/4 + 1/8 + 1/16 + - 每项是前一项的一半,如果一共有20项, 求这个和是多少,结果用分数表示出来. 类似:3 / 2 当然,这只是加了前2项而已 ...

  7. c语言苏小江第九章实验题答案,蓝桥杯C语言C组校内赛题目解析

    今天事非常多,所有事情都凑在一起忙的不可开交.早上社团原本要搞活动,又恰好凑上实训课,三四节来不及搬东西过去,只能下课后再过去帮忙,手机没电,还是要忙到接近12点半才来得及回宿舍吃外卖. 饭还没吃几口 ...

  8. 2023第十四届蓝桥杯C/C++B组省赛题解

    2023蓝桥C/C++B组省赛 文章目录 2023蓝桥C/C++B组省赛 试题A: 日期统计 题目描述 枚举 参考代码 试题B: 01 串的熵 题目描述 枚举|模拟 参考代码 试题C: 冶炼金属 题意 ...

  9. 2017年第八届蓝桥杯C/C++ B组省赛历年真题及解析

    默认阅读的你具备c/c++基本语法,作者对每一题点明需要掌握的算法策略或思想,并进行简单注释解释: 该博客的正确食用方式:简单了解点明的算法思想和策略,再自行思索之后自己写代码,提交不过再看看别人的代 ...

  10. 2017第八届蓝桥杯C/C++ B组省赛题解

    前言: 毕业前最后一次蹭一次公费旅游了.以前都是在成都,这次在绵阳,至少不用早起了.应该是最后一次玩蓝桥杯了. 尊重原创,转载请注明出处:http://blog.csdn.net/y119664537 ...

最新文章

  1. DPDK架构与特点(转)
  2. python爬虫新手项目-Python爬虫实战之取电影天堂,,新手练手项目
  3. Git命令家底儿及Git数据通信原理详解
  4. 建设世界级数据中心正当时
  5. 图文分析 OSPF 的特点
  6. 为什么我的 Func 如此之慢?
  7. java excel odbc_Java:无法使用JDBC ODBC更新Excel
  8. java设置事务锁_事务与锁
  9. 关于pad、智能手机功能增进的设想
  10. MVVM架构~knockoutjs系列之扩展ajax验证~验证输入数据是否与后台数据相等
  11. APMCon2017 | 一大波技术大神来袭,你要的性能优化干货这里全都有
  12. Maven的setting配置详解
  13. 【C#】Winform常用属性和事件笔记大全(入门者参考)
  14. 大学英语计算机四级考试内容,大学英语四级考试大纲
  15. c lua语言教程,Lua教程(三):C语言、C++中调用Lua的Table示例
  16. FFMPEG框架学习——(2)视频的提取和解码
  17. 捷风资讯app sign
  18. ETL开发过程中遇到的问题
  19. 戴尔win10开机后,在桌面点右键一直转圈,但任务栏又能正常点击
  20. 谈谈我对 iPhone5 全景照相机 的理解

热门文章

  1. Vulcanexus机器人操作系统ROS2一站式工具集(Galactic+Humble)
  2. python将图片转换为抽象画
  3. scrapy爬取漫画
  4. hadoop--HDFS基础(适合初学者)
  5. Java之二维码工具包-yellowcong
  6. Spark学习总结以及问题
  7. 当贝OS版本更新:当贝智慧盒子Z1 Pro新增边看边聊,一起在线吐槽神剧
  8. oracle rac启停数据库,RAC启停全过程
  9. 梅州放射性实验室建设布局要求分析
  10. 以网易严选S级大促为例,详解如何做好活动项目管理(参考模板)