信息学奥赛课课通(C++)第9单元-电子课件.pptxVIP

  • 15
  • 0
  • 约2.8万字
  • 约 280页
  • 2023-10-26 发布于重庆
  • 举报

信息学奥赛课课通(C++)第9单元-电子课件.pptx

第 9 单元 基本算法;第 1 课 进制转换;进制;进制;1. 进制转换的基本原理;进制;2. 进制转换的应用举例;【问题分析】 读入 n 和 x,根据 n 和 x 的位数,分别求出 x 的每一位对应的“权值”,然后穷举每一位,将它乘以该位对应的权值,累加便可得到结果。 更高效、更简洁的算法是采用“秦九韶公式”。对于样例输入,可以这样计算: (((((1*2)+0)*2+0)*2+1)*2+1)*2+0=38 具体实现采用“迭代法”,用一个变量不断乘以n,再加上下一位x[i]。;//p9-1-1 #includebits/stdc++.h using namespace std; int main(){ freopen(” change.in ” , ” r ” ,stdin); freopen( ” change.out ” , ” w ” ,stdout); int n,ans = 0,i = 0; char s[32]; scanf( ” %d\n ” ,n); while((s[i] = getchar()) != \n){ ans = ans * n + (s[i] - 48); i++; } printf( ” %d\n ” ,ans); return 0; };例2、汽车牌照;例3、数列;实践巩固;第 2 课 高精度运算;高精度运算;例1、高精度加法;【问题分析】 用字符串的方式读入两个高精度数,转存到两个整型数组 a 和 b 中,如图 9.2-1 所示,模拟加法的过程,从低位(第 0 位)开始对应位 a[i] 和 b[i] 相加,同时处理进位,结果存储到另一个数组 c 中。最后,从高位到低位输出 c[i]。;例2、高精度乘法;【问题分析】 如图 9.2-2 所示,模拟“竖式”乘法的过程,用一个数的每一位 a[i] (从低位开始)逐位与另一个数的每一位 b[j] 相乘,结果存储到 c[i+j] 位,同时处理好进位。;例3、n! 的精确值;【问题分析】 假设已经计算好(n-1)!,那么,对于求 n!,就是用一个整数去乘以一个高精度数。只要用 n乘以(n-1)! 的每一位(从低位开始),同时不断处理进位。;例4、n/m 的精确值;【问题分析】 如图 9.2-3 所示,模拟数学中的“短除法”。由数学知识可知,除法运算中被除数、除数和商、余数的关系为: 新的被除数 = 10× 余数 商 = 被除数/除数 余数 = 被除数 % 除数;实践巩固;第 3 课 模拟;模拟;例1、蚱蜢;【输入格式】 一行一个字符串,字符串长不超过 100。 【输出格式】 一行一个整数,代表(最小)能力值。 【输入样例】 KMLPTGFHNBVCDRFGHNMBVXWSQFDCVBNHTJKLPMNFVCKMLPTGFHNBVCDRF- GHNMBVXWSQFDCVBNHTJKLPMNFVC 【输出样例】 85;【问题分析】 从头到尾枚举纸带的每一个字母,按照规则模拟蚱蜢在元音字母之间跳跃的过程,打擂台记录能力值。 参考程序见教材336页。;例2、遭遇战;第 2 行包含 3 个整数 x、y 和 d,表示小林的初始位置和一开始跑的方向。其中,d=0 表示东; d=1 表示南;d=2 表示西;d=3 表示北。 第 3 行与第 2 行格式相同,但描述的是小华。 【输出格式】 输出 t 行,若会遭遇,则包含两个整数,表示他们第一次相遇格子的坐标,否则输出“-1”。;【问题分析】 设置两个布尔型数组,分别记录模拟每个人走过的格子。如果两人没有相遇并且还可以跑,就让他们按照规则一直跑下去。 参考程序见教材337-338页。;例3、乒乓球;比如,现在有这么一份记录,(其中 W 表示华华获得一分,L 表示华华对手获得一分): WWWWWWWWWWWWWWWWWWWWWWLW。在 11 分制下,此时比赛的结果是华华第一局 11 比 0 获胜,第二局 11 比 0 获胜,正在进行第三局,当前比分 1 比 1。而在 21 分制下,此时比赛结果是华华第一局 21 比 0 获胜,正在进行第二局,比分 2 比 1。如果一局比赛刚开始,则此时比分为 0 比 0。 本题就是要对于一系列比赛信息的输入(WL 形式),输出正确的结果。 【输入格式】 输入文件包含若干行字符串(每行至多 20 个字母),字符串由大写的 W、L 和 E 组成。其中E 表示比赛信息结束,程序应该忽略 E 之后的所有内容。;【输出格式】 输出由两部分组成,每部分有若干行,每一行对应一局比

文档评论(0)

1亿VIP精品文档

相关文档