C语言的蓝桥杯习题及解析1.pdf

上传人:zh****71 文档编号:126719147 上传时间:2020-03-27 格式:PDF 页数:19 大小:112.91KB
返回 下载 相关 举报
C语言的蓝桥杯习题及解析1.pdf_第1页
第1页 / 共19页
C语言的蓝桥杯习题及解析1.pdf_第2页
第2页 / 共19页
亲,该文档总共19页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《C语言的蓝桥杯习题及解析1.pdf》由会员分享,可在线阅读,更多相关《C语言的蓝桥杯习题及解析1.pdf(19页珍藏版)》请在金锄头文库上搜索。

1、 问题描述 输入一个正整数n 输出 n 的值 其中 n 1 2 3 n 算法描述 n 可能很大 而计算机能表示的整数范围有限 需要使用高精度计算的方法 使用一 个数组 A来表示一个大整数a A 0 表示 a 的个位 A 1 表示 a 的十位 依次类推 将 a 乘以一个整数k 变为将数组A的每一个元素都乘以k 请注意处理相应的进位 首先将a 设为 1 然后乘2 乘 3 当乘到n 时 即得到了n 的值 输入格式 输入包含一个正整数n n 1000 输出格式 输出 n 的准确值 样例输入 10 样例输出 3628800 include include define MAX 3000 int main

2、 int a MAX i j n int c 0 进位 int s memset a 0 sizeof a scanf d a 0 1 for i 2 i n i 乘数 for j 0 j 0 i 从第一个不为零的开始 if a i break for j i j 0 j printf d a j return 0 BASIC 29 高精度加法 问题描述 输入两个整数a 和 b 输出这两个整数的和 a 和 b都不超过100 位 算法描述 由于 a 和 b 都比较大 所以不能直接使用语言中的标准数据类型来存储 对于这种问 题 一般使用数组来处理 定义一个数组A A 0 用于存储 a 的个位 A

3、1 用于存储a 的十位 依此类推 同样 可以用一个数组B来存储 b 计算 c a b的时候 首先将A 0 与 B 0 相加 如果有进位产生 则把进位 即和 的十位数 存入r 把和的个位数存入C 0 即 C 0 等于 A 0 B 0 10 然后计算A 1 与 B 1 相加 这时还应将低位进上来的值r 也加起来 即C 1 应该是 A 1 B 1 和 r 三 个数的和 如果又有进位产生 则仍可将新的进位存入到r 中 和的个位存到C 1 中 依 此类推 即可求出C的所有位 最后将C输出即可 输入格式 输入包括两行 第一行为一个非负整数a 第二行为一个非负整数b 两个整数都不超 过 100 位 两数的最

4、高位都不是0 输出格式 输出一行 表示a b的值 样例输入 20100122201001221234567890 2010012220100122 样例输出 20100122203011233454668012 include include define MAXa 100 define MAXb 100 define MAXc 105 int main char a MAXa b MAXb int i j c MAXc t la lb n 0 int r 0 进位 scanf s s a b memset c 0 sizeof c la strlen a lb strlen b for i

5、la 1 j lb 1 i 0i j t a i 0 b j 0 r c n t 10 r t 10 if la 0 j t b j 0 r c n t 10 r t 10 else if la lb for i 0 i t a i 0 r c n t 10 r t 10 else c n r for i MAXc 1 i 0 i 忽略前导 0 if c i break for j i j 0 j printf d c j printf n return 0 BASIC 28 Huffman 树 问题描述 Huffman 树在编码中有着广泛的应用 在这里 我们只关心Huffman 树的构造过程

6、 给出一列数 pi p0 p1 pn 1 用这列数构造Huffman 树的过程如下 1 找到 pi 中最小的两个数 设为pa 和 pb 将 pa 和 pb 从 pi 中删除掉 然后将它 们的和加入到 pi 中 这个过程的费用记为pa pb 2 重复步骤1 直到 pi 中只剩下一个数 在上面的操作过程中 把所有的费用相加 就得到了构造Huffman 树的总费用 本题任务 对于给定的一个数列 现在请你求出用该数列构造Huffman 树的总费用 例如 对于数列 pi 5 3 8 2 9 Huffman 树的构造过程如下 1 找到 5 3 8 2 9 中最小的两个数 分别是2 和 3 从 pi 中删除

7、它们并将和 5 加入 得到 5 8 9 5 费用为5 2 找到 5 8 9 5 中最小的两个数 分别是5 和 5 从 pi 中删除它们并将和10 加入 得到 8 9 10 费用为10 3 找到 8 9 10 中最小的两个数 分别是8 和 9 从 pi 中删除它们并将和17 加 入 得到 10 17 费用为 17 4 找到 10 17 中最小的两个数 分别是10 和 17 从 pi 中删除它们并将和27 加 入 得到 27 费用为27 5 现在 数列中只剩下一个数27 构造过程结束 总费用为5 10 17 27 59 输入格式 输入的第一行包含一个正整数n n 100 接下来是n 个正整数 表示

8、p0 p1 pn 1 每个数不超过1000 输出格式 输出用这些数构造Huffman 树的总费用 样例输入 5 5 3 8 2 9 样例输出 59 include include include define MAX 105 int main int a n i j k1 k2 int count 0 scanf d a int malloc 2 n 1 sizeof int memset a 1 sizeof a for i 0 i n i scanf d a i for i 0 i n 1 i 总共 n 1 层循环 for k1 0 k1 n ik1 for k2 k1 1 k2 n ik

9、2 for j k2 j n ij if a j a k1 k2 k1 k1 j else if a j k2 k2 j a n i a k1 a k2 count count a n i a k1 1 a k2 1 printf d count return 0 问题描述 给定当前的时间 请用英文的读法将它读出来 时间用时h 和分 m表示 在英文的读法中 读一个时间的方法是 如果m为 0 则将时读出来 然后加上 o clock 如 3 00 读作 three o clock 如果 m不为 0 则将时读出来 然后将分读出来 如5 30 读作 five thirty 时和分的读法使用的是英文数字

10、的读法 其中0 20 读作 0 zero 1 one 2 two 3 three 4 four 5 five 6 six 7 seven 8 eight 9 nine 10 ten 11 eleven 12 twelve 13 thirteen 14 fourteen 15 fifteen 16 sixteen 17 seventeen 18 eighteen 19 nineteen 20 twenty 30 读作 thirty 40 读作 forty 50 读作 fifty 对于大于20 小于 60 的数字 首先读整十的数 然后再加上个位数 如31 首先读 30 再加 1 的读法 读作 th

11、irty one 按上面的规则21 54 读作 twenty one fifty four 9 07 读作 nine seven 0 15 读作 zero fifteen 输入格式 输入包含两个非负整数h 和 m 表示时间的时和分 非零的数字前没有前导0 h 小于 24 m小于 60 输出格式 输出时间时刻的英文 样例输入 0 15 样例输出 zero fifteen include int main char a 21 20 zero one two three four five six seven eight nine ten eleven twelve thirteen fourtee

12、n fifteen sixteen seventeen eighteen nineteen twenty char b 6 20 twenty thirty forty fifty int m h scanf d d if m 0 if h 20 printf s o clock a h else printf s s b h 10 a h 10 else if h 20 if m 20 printf s s a h a m else printf s s s a h b m 10 a m 10 else if m 20 printf s s s b h 10 a h 10 a m else

13、printf s s s s b h 10 a h 10 b m 10 a m 10 return 0 BASIC 25 回形取数 问题描述 回形取数就是沿矩阵的边取数 若当前方向上无数可取或已经取过 则左转90 度 一 开始位于矩阵左上角 方向向下 输入格式 输入第一行是两个不超过200 的正整数 m n 表示矩阵的行和列 接下来m行每行 n 个整数 表示这个矩阵 输出格式 输出只有一行 共mn个数 为输入矩阵回形取数得到的结果 数之间用一个空格分隔 行末不要有多余的空格 样例输入 3 3 1 2 3 4 5 6 7 8 9 样例输出 1 4 7 8 9 6 3 2 5 样例输入 3 2 1

14、 2 3 4 5 6 样例输出 1 3 5 6 4 2 include include int main int a 205 205 b 205 205 int m n i j x 1 y 1 count 0 scanf d d memset a 1 sizeof a memset b 1 sizeof b for i 1 i m i for j 1 j n j scanf d printf d a x y b x y 1 count while count n m while a x 1 y 1 printf d a x y b x y 1 count while a x y 1 1 pri

15、ntf d a x y b x y 1 count while a x 1 y 1 printf d a x y b x y 1 count while a x y 1 1 printf d a x y b x y 1 count return 0 龟兔赛跑预测 问题描述 话说这个世界上有各种各样的兔子和乌龟 但是研究发现 所有的兔子和乌龟都有一 个共同的特点 喜欢赛跑 于是世界上各个角落都不断在发生着乌龟和兔子的比赛 小 华对此很感兴趣 于是决定研究不同兔子和乌龟的赛跑 他发现 兔子虽然跑比乌龟快 但它们有众所周知的毛病 骄傲且懒惰 于是在与乌龟的比赛中 一旦任一秒结束后兔 子发现自己领先t

16、 米或以上 它们就会停下来休息s 秒 对于不同的兔子 t s 的数值是 不同的 但是所有的乌龟却是一致 它们不到终点决不停止 然而有些比赛相当漫长 全程观看会耗费大量时间 而小华发现只要在每场比赛开始 后记录下兔子和乌龟的数据 兔子的速度v1 表示每秒兔子能跑v1 米 乌龟的速度 v2 以及兔子对应的t s 值 以及赛道的长度l 就能预测出比赛的结果 但是小华很 懒 不想通过手工计算推测出比赛的结果 于是他找到了你 清华大学计算机系的高才 生 请求帮助 请你写一个程序 对于输入的一场比赛的数据v1 v2 t s l 预测 该场比赛的结果 输入格式 输入只有一行 包含用空格隔开的五个正整数v1 v2 t s l 其中 v1 v2 100 t 300 s 10 l 10000且为 v1 v2 的公倍数 输出格式 输出包含两行 第一行输出比赛结果 一个大写字母 T 或 R 或 D 分别表 示乌龟获胜 兔子获胜 或者两者同时到达终点 第二行输出一个正整数 表示获胜者 或者双方同时 到达终点所耗费的时间 秒数 样例输入 10 5 5 2 20 样例输出 D 4 样例输入 10 5 5 1 20

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 商业/管理/HR > 其它文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号