信息学奥赛课课通(C++)第9单元 习题解答

合集下载

国际信息学奥林匹克竞赛2023题解

国际信息学奥林匹克竞赛2023题解

国际信息学奥林匹克竞赛(International Olympiad in Informatics,简称IOI)是一项面向高中生的信息学竞赛,旨在促进全球信息学教育和人才培养。

每年都会有来自世界各地的优秀学生参加这一盛事,并通过解决一系列复杂的编程问题来展示他们的才华。

作为一项高级的信息学竞赛,IOI赛题往往涉及到算法和数据结构的深度思考,考验选手在编程能力和解决问题能力上的造诣。

2023年国际信息学奥林匹克竞赛的题目更是备受瞩目,接下来我们就来深度剖析这些题目并提供解题思路。

第一道题目:“字符串排列”题目描述:给定一个长度为n的字符串s,求出它的所有排列方式,并将其按字典序输出。

解题思路:1. 我们可以利用递归的方法来求解字符串的全排列。

具体地,可以将字符串s的第一个字符与后面的字符依次交换,然后对剩下的字符串进行全排列,直到交换完成一次排列。

这样就可以得到字符串s所有的排列方式。

2. 在程序设计的过程中,我们要注意剪枝操作,可以通过设定一个标志数组来记录某个字符是否已经被使用过,从而避免重复排列的情况。

这道题目的解法较为经典,通过深入的逻辑分析和编程技巧,可以很好地完成题目要求。

第二道题目:“最大子段和”题目描述:给定一个长度为n的整数序列,求出其连续子段的和的最大值。

解题思路:1. 一个直观的解法是利用动态规划来解决这个问题。

具体地,我们可以设置一个dp数组,dp[i]表示以第i个数结尾的最大子段和,然后通过递推式dp[i] = max(nums[i], dp[i-1]+nums[i])来更新dp数组。

2. 在实现过程中,我们要注意处理边界情况和初始化操作,以及在遍历过程中及时更新最大子段和的值。

这道题目需要考虑到较多的边界情况和递推关系,是一道非常有挑战性的动态规划问题。

总结回顾:国际信息学奥林匹克竞赛2023的题目涵盖了递归、动态规划等多个领域,对选手的算法能力和编程功底提出了很高的要求。

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

信息学奥赛课课通(C++)第9单元 电子课件
高等教育出版社
信息学奥赛课课通(C++)
【问题分析】 假设已经计算好(n-1)!,那么,对于求 n!,就是用一个整
数去乘以一个高精度数。只要用 n乘以(n-1)! 的每一位(从低 位开始),同时不断处理进位。
参考程序见教材331页。
高等教育出版社
信息学奥赛课课通(C++)
例4、n/m 的精确值
【问题描述】 输入n和m,输出n除以m的精确值。假设n和m在int范围以 内,结果精确到小数点后100位。 【输入样例】 355 113 【输出样例】 3.14159292035398230088495575221238938053097345132743 36283185840707964601769911504424778761061946902654
信息学奥赛课课通(C++)
第 9 单元 基本算法
作者:林厚从
高等教育出版社
信息学奥赛课课通(C++)
第 1 课 进制转换
学习目标 1. 理解二进制计数原理。 2. 掌握不同进制数之间的转换原理和实现方法。 3. 学会使用进制转换的原理解决一些实际问题。
高等教育出版社
信息学奥赛课课通(C++)
进制
高等教育出版社
信息学奥赛课课通(C++)
【问题分析】 用字符串的方式读入两个高精度数,转存到两个整型数组 a 和 b 中,如图 9.2-1 所示,模拟加法的过程,从低位(第 0 位) 开始对应位 a[i] 和 b[i] 相加,同时处理进位,结果存储到另 一个数组 c 中。最后,从高位到低位输出 c[i]。
ans = ans * n + (s[i] - 48); i++; } printf( ” %d\n ” ,ans); return 0; }

C语言习题及答案(第九章)

C语言习题及答案(第九章)

9-3编写程序,使用结构体类型,输出一年十二个月的英文名称及相应天数。

解:#include "stdio.h"struct date{char month[10] ;int daynumber ;}main(){int i ;struct datea[12]={{"January",31},{"February",29},{"March",31},{"Aprial",30},{ "May",31},{"June",30},{"july",31},{"August",31},{"September",30}, {"October",31},{"November",30},{"December",31}} ;for(i=0;i<12;i++);printf("%d 月:%s %d\n",i+1,a[i].month,a[i].daynumber) ;}思考:如何对结构体变量进行初始化?对结构体变量的引用为何要体现为分量(或成员)的引用?9-4 编写程序求空间任一点到原点的距离,点用结构体描述。

并请考虑求空间中任意两点的距离的程序。

解:#include "stdio.h"#include "math.h"struct point{float x ;float y ;float z ;} main(){double d1,d2,d ;struct point p1,p2 ;printf("请输入第一个点的坐标:");scanf("%f,%f,%f",&p1.x,&p1.y,&p1.z);printf("请输入第二个点的坐标:");scanf("%f,%f,%f",&p2.x,&p2.y,&p2.z);d1=sqrt(p1.x*p1.x+p1.y*p1.y+p1.z*p1.z);d2=sqrt(p2.x*p2.x+p2.y*p2.y+p2.z*p2.z);d=sqrt((p2.x-p1.x)*(p2.x-p1.x)+(p2.y-p1.y)*(p2.y-p1.y)+(p2.z-p1.z)*( p2.z-p1.z));printf("第一个点到原点的距离:%f\n",d1);printf("第二个点到原点的距离:%f\n",d2);printf("两点间的距离:%f\n",d);}9-5 编写输入、输出10个朋友数据的通讯录程序,每个朋友数据包括姓名、地址、邮编、电话、传呼、手机等数据。

高中信息奥赛c 试题及答案

高中信息奥赛c 试题及答案

高中信息奥赛c 试题及答案高中信息奥赛C试题及答案一、选择题(每题4分,共40分)1. 在C++中,以下哪个关键字用于声明一个类?A. structB. classC. unionD. enum答案:B2. 下列哪个选项是C++中的合法标识符?A. 2variableB. variable2C. variable-2D. variable$2答案:B3. 在C++中,以下哪个选项是正确的字符串字面量?A. "Hello, World!"B. 'Hello, World!'C. "Hello, World!"'D. 'Hello, World!"'答案:A4. 在C++中,以下哪个是正确的函数声明?A. int add(int a, int b);B. int add(a, b);C. int add(int, int);D. int add(a, b) int a, b;答案:A5. 在C++中,以下哪个选项是正确的数组声明?A. int array[10];B. int array[];C. int array[10] = {1, 2, 3};D. All of the above答案:D6. 在C++中,以下哪个选项是正确的指针声明?A. int *ptr;B. int *ptr = 0;C. int *ptr = nullptr;D. All of the above答案:D7. 在C++中,以下哪个选项是正确的引用声明?A. int &ref = a;B. int &ref = *a;C. int &ref = a, b;D. int &ref = nullptr;答案:A8. 在C++中,以下哪个选项是正确的常量声明?A. const int a = 10;B. const int *a = 10;C. int *const a = 10;D. int const a = 10;答案:D9. 在C++中,以下哪个选项是正确的模板声明?A. template <typename T> T add(T a, T b);B. template <class T> T add(T a, T b);C. template <typename T> T add(T a, T b) = 0;D. template <typename T> T add(T a, T b) {}答案:A10. 在C++中,以下哪个选项是正确的继承声明?A. class Derived : public Base {};B. class Derived : private Base {};C. class Derived : protected Base {};D. All of the above答案:D二、填空题(每题5分,共30分)11. 在C++中,使用____关键字可以创建一个匿名函数。

信息学奥赛课课通(C++)第9单元习题解答

信息学奥赛课课通(C++)第9单元习题解答

信息学奥赛课课通(C++)第9单元习题解答第九单元习题解答第1课1、D2、A3、D4、问题分析(1)三分法n=2~3,1次。

n=4~9,2次。

……把n转换成三进制数,比较下面的不等式:(1000…0)3<n ≤(10000…0)3假设 m个0 假设m+1个0 则称重次数最多就是m+1次。

比如n=26,26=(222)3,(100)3<(222)3≤(1000)3,所以要称3次,与10~27个的做法一样。

那么,具体怎么称呢?将n转换成若干个三进制数(只有1个1和若干个0组成)的和:26=(100)3+(100)3+(10)3+(10)3+(1)3+(1)3也就是要把伪币分成6份:9、9、3、3、1、1。

第1次,天平两边各放9个,若平衡,则为情况1,不平衡为情况2。

情况1:第2次,天平两边各放3个,若平衡则为情况1.1,否则为情况1.2。

情况1.1:第3次,把天平两边各放1个,立刻找出重的假币。

情况1.2:将重的那边3个分成3份:1、1、1,第3次即可称出。

情况2:将重的那边9个分成:3、3、3,转换成情况1,最多再用2次称出。

(2)本题稍做改动,设12个硬币里有1各假币,但不知道伪币比真币轻还是重,问最少称几次可以找出。

还是用三分法,但是情况要复杂的多,详细见下表:7、问题分析将'i','v','x','l','c','d','m'存入常量数组。

把十进制数逐位转换成罗马数字,并按照位数(即第几位)计算数组下标。

例如3802:2:'i'+'i' (位数:1,i的下标是1*2-1=1)0:'' (位数:2,空)8:'d'+'c'+'c'+'c' (位数:3,d的下标是3*2=6,c的下标是3*2-1=5)3:'m'+'m'+'m' (位数:4,m的下标是4*2-1=7)连接起来,得'mmmdcccii'。

信息学奥赛试题精选33题(附带题解)

信息学奥赛试题精选33题(附带题解)

第1~10题为基础题,第11~20题为提高题,第21~33为综合题注:因为在本文档中需要用到一些特殊的数学符号(如:求和号、分数等),所以当您在百度文库中浏览时,一些数学符号可能会显示不出来,不过当您把本文档下载下来在本地浏览时,所有的符号即可全部都显示出来。

^_^基础题:【1 Prime Frequency】【问题描述】给出一个仅包含字母和数字(0-9, A-Z 以及a-z)的字符串,请您计算频率(字符出现的次数),并仅报告哪些字符的频率是素数。

输入:输入的第一行给出一个整数T( 0<T<201),表示测试用例个数。

后面的T行每行给出一个测试用例:一个字母-数字组成的字符串。

字符串的长度是小于2001的一个正整数。

输出:对输入的每个测试用例输出一行,给出一个输出序列号,然后给出在输入的字符串中频率是素数的字符。

这些字符按字母升序排列。

所谓“字母升序”意谓按ASCII 值升序排列。

如果没有字符的频率是素数,输出“empty”(没有引号)。

注:试题来源:Bangladesh National Computer Programming Contest在线测试:UV A 10789提示先离线计算出[2‥2200]的素数筛u[]。

然后每输入一个测试串,以ASCLL码为下标统计各字符的频率p[],并按照ASCLL码递增的顺序(0≤i≤299)输出频率为素数的字符(即u [p[i]]=1且ASCLL码值为i的字符)。

若没有频率为素数的字符,则输出失败信息。

【2 Twin Primes】【问题描述】双素数(Twin Primes)是形式为(p, p+2),术语“双素数”由Paul Stäckel (1892-1919)给出,前几个双素数是(3, 5), (5, 7), (11, 13), (17, 19), (29, 31), (41, 43)。

在本题中请你给出第S对双素数,其中S是输入中给出的整数。

第9单元 基本算法 第 10 课 深度优先搜索

第9单元 基本算法 第 10 课 深度优先搜索
高等教育出版社
信息学奥赛课课通(C++)
例5、背包问题
问题描述】 小明就要去春游了。妈妈给他买了很多好吃的。小明想把 这些吃的都放进他的书包,但他很快发现,妈妈买的东西 实在太多了,他必须放弃一些,但又希望能带尽可能多的 好吃的。举算法解决一些实际问题。 已知小明的书包最多可以装入总重量为 s 的物品,同时也知 道小明妈妈给他买的每样东西的重量。请从这些好吃的中 选出若干装入小明的书包中,使得装入物品的总重量正好 为 s。找到任意一组解输出即可。
高等教育出版社
信息学奥赛课课通(C++)
【输入样例】 8 14 13259476 【输出样例】 1346 【输入样例】 3 12 285 【输出样例】 No Answer!
高等教育出版社
信息学奥赛课课通(C++)
【问题分析】 本题是最简单的“0-1 背包问题”。只要从第一件物品开始, 考虑取和不取两种情况,进行递归深搜,一旦发现装入物 品的总重量等于背包的容量,就输出答案。 具体程序参见教材457-458页。此算法的时间复杂度为O (2^n ),对于 n=100,显然会超时。我们将在后面专门讨 论解决 0-1 背包问题的其他算法。
高等教育出版社
信息学奥赛课课通(C++)
【问题分析】 设 ans 表示小林从初始位置出发可以经过的黑色瓷砖数,初 始值为 0,从小林的初始位置“@”开始深度优先搜索, ans++,再把该位置设置为红色(已走过),然后穷举其上、 下、左、右四个位置是否是黑色瓷砖。是,则递归搜索。 参考程序见教材453页。
信息学奥赛课课通(C++)
第 9 单元 基本算法
作者:林厚从

第七届青少年信息学奥赛试题及答案

第七届青少年信息学奥赛试题及答案

第七届青少年信息学分区奥赛试题(提高组PASCAL)2008-06-05 21:14:58 来源:巨人科技教育中心作者:佚名 [打印] [评论] 一、选择一个正确答案代码(A/B/C/D),填入每题的括号内(每题1.5分,多选无分,共30分)1、中央处理器CPU能访问的最大存储器容量取决于( )A)地址总线B)数据总线C)控制总线 D)内存容量2、计算机软件保护法是用来保护软件( )的。

A)编写权B)复制权C)使用权D)著作权3、64KB的存储器用十六进制表示,它的最大的地址码是( )A)10000 B)FFFF C)1FFFF D)EFFFF4、在树型目录结构中,不允许两个文件名相同主要指的是( )A)同一个磁盘的不同目录下B)不同磁盘的同一个目录下C)不同磁盘的不同目录下 C)同一个磁盘的同一个目录下5、下列设备哪一项不是计算机输入设备( )A)鼠标B)扫描仪C)数字化仪D)绘图仪6、在计算机硬件系统中,cache是( )存储器A)只读B)可编程只读C)可擦除可编程只读D)高速缓冲7、若我们说一个微机的CPU是用的PII300,此处的300确切指的是( )A)CPU的主时钟频率B)CPU产品的系列号C)每秒执行300百万条指令D)此种CPU允许最大内存容量8、Email邮件本质上是一个( )A)文件B)电报C)电话D)传真9、2KB的内存能存储( )个汉字的机内码A)1024 B)516 C)2048 D)21810、以下对Windows的叙述中,正确的是( )A)从软盘上删除的文件和文件夹,不送到回收站B)在同一个文件夹中,可以创建两个同类、同名的文件C)删除了某个应用程序的快捷方式,将删除该应用程序对应的文件D)不能打开两个写字板应用程序11、运算式(2047) 10 —(3FF) 16 +(2000) 8 的结果是( )A)(2048) 10 B)(2049) 10 C)(3746) 8 D)(1AF7) 1612、TCP/IP协议共有( )层协议A)3 B)4 C)5 D)613.若已知一个栈的入栈顺序是1,2,3,…,n,其输出序列为P1,P2,P3,…,Pn,若P1是n,则Pi是( )A)i B)n-1 C)n-i+1 D)不确定14.计算机病毒是( )A)通过计算机传播的危害人体健康的一种病毒B)人为制造的能够侵入计算机系统并给计算机带来故障的程序或指令集合C)一种由于计算机元器件老化而产生的对生态环境有害的物质D)利用计算机的海量高速运算能力而研制出来的用于疾病预防的新型病毒15.下面关于算法的错误说法是( )A)算法必须有输出B)算法必须在计算机上用某种语言实现C)算法不一定有输入 D)算法必须在有限步执行后能结束16.[x]补码=10011000,其原码为( )A)011001111 B)11101000 C)11100110 D)0110010117.以下哪一个不是栈的基本运算( )A)删除栈顶元素B)删除栈底的元素C)判断栈是否为空 D)将栈置为空栈18.在顺序表(2,5,7,10,14,15,18,23,35,41,52)中,用二分法查找12,所需的关键码比较的次数为( )A)2 B)3 C)4 D)519.一棵二叉树的高度为h,所有结点的度为0,或为2,则此树最少有( )个结点A)2 h -1 B)2h-1 C)2h+1 D)h+120.无向图G=(V,E),其中V={a,b,c,d,e,f} E={(a,b),(a,e),(a,c),(b,e),(c,f),(f,d),(e,d)}对该图进行深度优先遍历,得到的顶点序列正确的是( )A)a,b,e,c,d,f B)a,c,f,e,b,d C)a,e,b,c,f,d D)a,b,e,d,f,c二、问题求解(5+7=12分)1.已知一棵二叉树的结点名为大写英文字母,其中序与后序遍历的顺序分别为:CBGEAFHDIJ 与CGEBHFJIDA则该二叉树的先序遍历的顺序为:2.平面上有三条平行直线,每条直线上分别有7,5,6个点,且不同直线上三个点都不在同一条直线上。

信息学奥赛基础知识习题(答案版)

信息学奥赛基础知识习题(答案版)

信息学奥赛基础知识习题(答案版)一、选择题(下列各题仅有一个正确答案,请将你认为是正确的答案填在相应的横线上)1.我们把计算机硬件系统和软件系统总称为 C 。

(A)计算机CPU (B)固件(C)计算机系统(D)微处理机2.硬件系统是指 D .(A)控制器,运算器 (B)存储器,控制器(C)接口电路,I/O设备 (D)包括(A)、(B)、(C) 3。

计算机软件系统包括 B .A) 操作系统、网络软件 B)系统软件、应用软件C)客户端应用软件、服务器端系统软件 D)操作系统、应用软件和网络软件4.计算机硬件能直接识别和执行的只有 D .(A)高级语言(B)符号语言(C)汇编语言 (D)机器语言5.硬盘工作时应特别注意避免 B .(A)噪声(B)震动 (C)潮湿 (D)日光6.计算机中数据的表示形式是 C 。

(A)八进制 (B)十进制 (C)二进制(D)十六进制7.下列四个不同数制表示的数中,数值最大的是 A .(A)二进制数11011101 (B)八进制数334(C)十进制数219 (D)十六进制数DA 8.Windows 9x操作系统是一个 A 。

(A)单用户多任务操作系统(B)单用户单任务操作系统(C)多用户单任务操作系统(D)多用户多任务操作系统9.局域网中的计算机为了相互通信,必须安装___B__。

(A)调制解调器(B)网卡(C)声卡(D)电视卡10.域名后缀为edu的主页一般属于__A____。

(A)教育机构(B)军事部门(C)政府部门(D)商业组织11。

香港在世界上注册的顶级域名是__A____。

(A)hk(B)cn(C)tw(D)com12.计算机能够自动、准确、快速地按照人们的意图进行运行的最基本思想是( D )。

(A)采用超大规模集成电路(B)采用CPU作为中央核心部件(C)采用操作系统 (D)存储程序和程序控制13.设桌面上已经有某应用程序的图标,要运行该程序,可以 C 。

(A)用鼠标左键单击该图标 (B)用鼠标右键单击该图标(C)用鼠标左键双击该图标(D)用鼠标右键双击该图标14.若己选定某文件,不能将该文件复制到同一文件夹下的操作是 C 。

信息学奥赛课课通

信息学奥赛课课通

分类清晰:该书的目录按照课程内容的难易程度和知识点的重要程度进行分 类,将知识点分为基础篇、进阶篇和高级篇三个层次,便于不同层次的学生进行 学习和掌握。
重点突出:该书的目录中对于重点知识点进行了突出标注,如“重点掌握”、 “特别提示”等,方便学生明确学习重点和难点,提高学习效率。
目录详尽:该书的目录非常详尽,包含了每个章节的标题、页码、知识点和 难度等级等信息,方便学生快速定位和查找所需内容。
阅读感受
在阅读《信息学奥赛课课通》这本书之后,我对信息学有了更深入的理解和 认识。这本书不仅为我打开了信息学的大门,也让我对信息学的各个方面有了全 面的掌握。以下是我对这本书的读后感。
我要感谢这本书的作者们,他们以丰富的内容和精心的排版,将复杂的信息 学知识生动地呈现出来。每个章节都以清晰的主题和简明的语言进行讲解,使得 我在阅读过程中能够轻松理解和接受这些知识。
这是《信息学奥赛课课通》的读书笔记,暂无该书作者的介绍。
感谢观看
内容摘要
本书还对算法进行了深入的分析和优化。学生们可以了解算法的时间复杂度和空间复杂度,并学 会如何优化算法以提高程序效率。这部分内容对于学生们在竞赛中获得高分非常重要。 本书还提供了大量的编程练习题和模拟试题。这些题目可以帮助学生们巩固所学知识和提高编程 能力。本书还提供了详细的解答和解析,方便学生们自我检查和学习。 《信息学奥赛课课通》是一本非常实用的参考书,适合所有参加信息学奥赛的学生们阅读和学习。 通过这本书的帮助,学生们可以系统地掌握信息学知识和技能,提高解题能力和竞赛成绩。
逻辑性强:该书的目录按照知识点之间的逻辑关系进行编排,使得学生在学 习过程中能够更好地理解和掌握相关知识。
《信息学奥赛课课通》这本书的目录分析非常实用,能够帮助学生更好地理 解和掌握课程内容,提高学习效率。该书的目录也具有一定的参考价值,可以作 为其他信息学教材编写时的参考。

全国青少年信息学奥林匹克竞赛(高中组)初赛试题及答案

全国青少年信息学奥林匹克竞赛(高中组)初赛试题及答案

NOI’95 “同创杯”全国青少年信息学(计算机)奥林匹克竞赛分区联赛初赛试题(高中组)竞赛用时:2小时一、基础题:<1> 执行①C>DIR 命令后,屏幕上显示如下画面:FORMAT COM 12145SYS COM 4878PUC BAT 126XCOPY EXE 112164 FILE(S)123456 bytes free接着又顺序执行了如下几条DOS 命令:②C>DIR> DF.TXT //表示将列表显示的目录作为文件写盘//③C>TYPE DF.TXT④C>DIR试问:执行命令③和④在屏幕上显示的结果是否与①相同?<2> 列举一个问题,使问题的解能对应相应的算法。

例如对算法:X:=10;Y:=5;READ(M,N);S:=X*M-Y*N;可列举出如下的问题:学生答题,答对一题可得10分,答错一题则要扣去5分,输入答对的题数(M)与答错的题数(N),求最后得分(S)是多少?现有以下算法:K:=0 ;FOR I:=0 TO 10 DOK:=K+(50-I*5)DIV 2+1请列出一个相应的问题。

<3> 有标号为A、B、C、D和1、2、3、4的8个球,每两个球装一盒,分装4盒。

标号为字母的球与标号为数字的球有着某种一一对应的关系(称为匹配),并已知如下条件:①匹配的两个球不能在一个盒子内。

②2号匹配的球与1号球在一个盒子里。

③A号和2号球在一个盒子里。

④B匹配的球和C号球在一个盒子里。

⑤3号匹配的球与A号匹配的球在一个盒子里。

⑥4号是A或B号球的匹配球。

⑦D号与1号或2号球匹配。

请写出这四对球匹配的情况。

<4> 从入口(1)到出口(17)的可行路线图中,数字标号表示关卡:现将上面的路线图,按记录结构存储如下:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18请设计一种能从存储数据中求出从入口到出口经过最少关卡路径的算法。

小学生信息学奥赛c++练习

小学生信息学奥赛c++练习

小学生信息学奥赛c++练习一、选择题(共20小题,每题2分,共40分)1、将十进制数89化为九进制数是()A) 88B) 89C) 98D) 108(正确答案)2、机器语言是用()编写的A) 二进制码(正确答案)B) ASCII码C) 十六进制码D)国标码3、下面()软件更适宜创建多媒体演示报告。

A) WordB) ExcelC) PowerPoint(正确答案)D) Windows4、我们经常听到的“3G”的含义是()A) 信息技术、电子技术、通迅技术B)第三代移动通讯技术(正确答案)C)高速互联网D)极速5、微型计算机的性能主要取决于()A) 内存B)中央处理器(正确答案)C) 主板D) 硬盘6、BIOS(基本输入输出系统)是一组固化在计算机内()上一个ROM芯片上的程序。

A) 控制器B) CPUC) 主板(正确答案)D) 内存条7、计算机中表示乘号的标识符是’’,它和数字8同在一个键上,输入这个符号,应配合使用其他()键A) shift(正确答案)B) AltC) Caps LockD) Ctrl8、下列文件扩展名为音乐格式的是:()A) .docB) .jpgC) .mp3(正确答案)D) .swf9、在C++系统中,下列可作为变量名的是()A) 北京B) whileC) do3(正确答案)D) mp(3)10、在C++程序中,以下结果为实数型的是( )A) 4&3B) 11/3C) fabs(3-1)D) sqrt(4)(正确答案)11、有以下程序段s=0;for (i=1;iif (a[i]% 2 == 0 ) s=s+1;cout该程序段的主要功能是( )[单选题]A) 判断数组a中是否有偶数B) 判断数组a中是否有奇数C) 判断数组a中是偶数的个数(正确答案)D) 判断数组a中是奇数的个数12、执行下面程序段后,x,y,z的值分别是( )cin>>x>>y>>endl; cin>>z>>endl;cout<<x<<y<<z<<endl;运行时输入:10 20 30 40 5060 70 80[单选题]A) 10 20 30B) 20 30 40C) 10 20 60(正确答案)D) 10 20 7013、下列哪个函数能从一个字符串中取得一个子串()?A)strlenB) charC) posD) substr(正确答案)14、下面程序段运行时循环体执行的总次数是( )。

信息学奥赛问题求解(带答案)

信息学奥赛问题求解(带答案)

1.已知,按中序遍历二叉树的结果为:abc问:有多少种不同形态的二叉树可以得到这一遍历结果,并画出这些二叉树。

2.有2×n的一个长方形方格,用一个1×2的骨牌铺满方格。

例如n=3时,为2×3方格。

此时用一个1×2的骨牌铺满方格,共有3种铺法:试对给出的任意一个n〔n>0〕,求出铺法总数的递推公式。

3.设有一个共有n级的楼梯,某人每步可走1级,也可走2级,也可走3级,用递推公式给出某人从底层开始走完全部楼梯的走法。

例如:当n=3时,共有4种走法,即1+1+1,1+2,2+1,3。

4.在a,b,c,d,e,f六件物品中,按下面的条件能选出的物品是:(1)a,b两样至少有一样(2)a,d不能同时取(3)a,e,f中必须有2样(4)b,c要么都选,要么都不选(5)c,d两样中选一样(6)若d不选,则e也不选5.平面上有三条平行直线,每条直线上分别有7,5,6个点,且不同直线上三个点都不在同一条直线上。

问用这些点为顶点,能组成多少个不同三角形?6.已知一棵二叉树的结点名为大写英文字母,其中序与后序遍历的顺序分别为:CBGEAFHDIJ与CGEBHFJIDA则该二叉树的先序遍历的顺序为:7.平面上有三条平行直线,每条直线上分别有7,5,6个点,且不同直线上三个点都不在同一条直线上。

问用这些点为顶点,能组成多少个不同四边形?8.如下图,有一个无穷大的的栈S,在栈的右边排列着1,2,3,4,5共五个车厢。

其中每个车厢可以向左行走,也可以进入栈S让后面的车厢通过。

现已知第一个到达出口的是3号车厢,请写出所有可能的到达出口的车厢排列总数(不必给出每种排列)。

出口←← 1 2 3 4 5S↓9..将N个红球和M个黄球排成一行。

例如:N=2,M=3可得到以下6种排法:红红黄黄黄红黄红黄黄红黄黄红黄黄红红黄黄黄红黄红黄黄黄黄红红问题:当N=4,M=3时有多少种不同排法?(不用列出每种排法)10.在书架上放有编号为1 ,2 ,...,n的n本书。

信息学奥林教材匹克联赛培训习题跟解答(附程序解析主要是动态规划)

信息学奥林教材匹克联赛培训习题跟解答(附程序解析主要是动态规划)

例13-4迷宫寻宝【问题描述】一个n行m列的迷宫(1<=n,m<=5),入口在左上角,规定只能向下或向右走。

迷宫的某些地方藏有不同价值(>0)的宝藏,同时又存在一些障碍无法通过。

求到达右下角出口时收集宝藏的最大值。

【输入】第一行n和m一下n行m列描述迷宫矩阵a[I,j](-1:障碍);最大值【样例输入】342-150513-16-18910【样例输出】33【分析】A[I,j]保存第i行第j列的宝藏价值。

令f[I,j]为从(1,1)走到第i行第j列时所能收集的宝藏的最大价值。

状态转移方程:F[I,j]=max{f[I-1,j],f[I,j-1]}+a[I,j](i<=n,1<=m)条件:n[I,j]<>-1初始:f[1,1]=a[1,1]目标:f[n,m]【参考程序】Const maxn=50;maxm=50;Fin=’b1.in’;Fout=’b1.out’;VarF,a:array[0..maxn+1,0..maxm+1]of integer;I,j,k,n,m,t:integer;Procedure init;BeginAssign(input,fin);Reset(input);Readln(n,m);For i:=0to n+1doFor j:=0to m+1do a[I,j]:=-1;A[0,1]:=0;For i:=1to n doFor j:=1to m doBeginRead(a[I,j]);If(a[I,j-1]=-1)and(a[i-1,j]=-1)then a[I,j]:=-1;//很关键的预处理End;Close(input);End;Function max(a,b:integer):integer;Begin max:=a;if b>a then max:=b;end;Procedure work;BeginFillchar(f,sizeof(f),0);For i:=1to n doFor j:=1to m doIf a[I,j]<>-1Then f[I,j]:=max(f[i-1,j],f[I,j-1])+a[I,j];End;Procedure print;BeginAssign(output,fout);Rewrite(output);Writeln(f[n,m]);Close(output);End;BeginInit;Work;Print;End.13-5花店橱窗布置(IOI1999)【问题描述】假设你想以最美观的方式布置花店的橱窗。

全国青少年信息学奥林匹克竞赛(高中组)初赛试题及答案

全国青少年信息学奥林匹克竞赛(高中组)初赛试题及答案

NOI’95 “同创杯”全国青少年信息学(计算机)奥林匹克竞赛分区联赛初赛试题(高中组)竞赛用时:2小时一、基础题:<1> 执行①C>DIR 命令后,屏幕上显示如下画面:FORMAT COM 12145SYS COM 4878PUC BAT 126XCOPY EXE 112164 FILE(S)123456 bytes free接着又顺序执行了如下几条DOS 命令:②C>DIR> DF.TXT //表示将列表显示的目录作为文件写盘//③C>TYPE DF.TXT④C>DIR试问:执行命令③和④在屏幕上显示的结果是否与①相同?<2> 列举一个问题,使问题的解能对应相应的算法。

例如对算法:X:=10;Y:=5;READ(M,N);S:=X*M-Y*N;可列举出如下的问题:学生答题,答对一题可得10分,答错一题则要扣去5分,输入答对的题数(M)与答错的题数(N),求最后得分(S)是多少?现有以下算法:K:=0 ;FOR I:=0 TO 10 DOK:=K+(50-I*5)DIV 2+1请列出一个相应的问题。

<3> 有标号为A、B、C、D和1、2、3、4的8个球,每两个球装一盒,分装4盒。

标号为字母的球与标号为数字的球有着某种一一对应的关系(称为匹配),并已知如下条件:①匹配的两个球不能在一个盒子内。

②2号匹配的球与1号球在一个盒子里。

③A号和2号球在一个盒子里。

④B匹配的球和C号球在一个盒子里。

⑤3号匹配的球与A号匹配的球在一个盒子里。

⑥4号是A或B号球的匹配球。

⑦D号与1号或2号球匹配。

请写出这四对球匹配的情况。

<4> 从入口(1)到出口(17)的可行路线图中,数字标号表示关卡:现将上面的路线图,按记录结构存储如下:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18请设计一种能从存储数据中求出从入口到出口经过最少关卡路径的算法。

C语言程序设计课件、教学资源第9章习题参考答案

C语言程序设计课件、教学资源第9章习题参考答案

习题九参考答案(1) C语言中在函数之间进行数据传递的方法除了通过返回值和全程变量(外部变量)外,还可以采用那一种方式,请以求两数之最大值为例,分别编程实现?#include "stdio.h"void fnMax(int a, int b, int *max);void fnMax(int a, int b, int *max){*max = a>b?a:b;}void main(){int a,b,max;scanf("%d%d",&a,&b);fnMax(a,b,&max);printf("%d",max);getch();}(2) 写出一通用函数,该函数从一个一维整型数组中寻找指定的一个数,若找到,返回该数在数组中的下标值,否则返回-1。

int fnOnenum(int a[], int n, int b){int i;for(i=0;i<n;i++)if(a[i]==b)return i;return (-1);}(3) 写出一通用函数,该函数从一个字符指针数组中寻找指定的一个字符串,若找到返回1,若找不到返回0。

int fnOnenum(char *a[],int n, char *b){int i;for(i=0;i<n;i++)if( strcmp(a[i],b)==0)return 1;return 0;}(4) 利用链表,建立一个教师信息示意性检索程序。

每个教师的信息包括:姓名、工作证号、所在系、性别、年龄和工龄等信息。

要求:①输入教师信息,并输出教师信息。

#include "malloc.h"#include "stdio.h"struct node{char chName[15];char chNO[15];char chDepart[20];int iAge;int iWorkAge;struct node *pNext;};struct node *pHead;void fnCreat(){struct node *pFront,*pBack;int i, iNum;scanf("please input a number:");scanf("%d", &iNum);for(i=0;i<iNum;i++){pFront = (struct node *)malloc(sizeof(struct node ));if(i==0)pHead = pFront; /*第一个结点*/elsepBack->pNext = pFront; /*非第一个结点,链接到链表的最后*/scanf("%s%s%s%d%d",pFront->chName, pFront->chNo, pFront->chDepart,&pFront->iAge,&pFront->iWorkAge);pFront->pNext = NULL; /*指针域赋空NULL*/pBack = pFront; /*使pBack指向最后一个结点*/}}void fnPrint(){struct node *pFront;pFront = pHead;while(pFront != NULL){printf("%s%s%s%d%d",pFront->chName, pFront->chNo, pFront->chDepart,pFront->iAge,pFront->iWorkAge);pFront = pFront->pNext; /*指向下一个结点*/}}void main(){fnCreat(); /*创建链表*/fnPrint(); /*输出链表*/getch();}(5) 要求编一自定义函数sort,完成对n个字符串的降序排序,然后在main函数中调用sort 对“Beijing”,“Shanghai”,“Shenzhen”,“Nanjing”,“Dalian”,“Qingdao”6个字符串排序,要求用指针数组表示这6个字符串。

《信息学奥赛一本通》:第9章 第1节 动态规划基础(C++版)-2018-11-17

《信息学奥赛一本通》:第9章  第1节 动态规划基础(C++版)-2018-11-17

#include <iostream> #include <algorithm> using namespace std; const int MAXN = 505; int A[MAXN][MAXN],F[MAXN][MAXN],N; int Dfs(int x,int y) {
②第一步向右:这类路径要求先从(x,y)到(x+1,y+1)再从(x+1,y+1)到终 点,分析方法与上面一样,这类路径最大权值和为A[x][y]+Dfs(x+1,y+1);
为了避免重复搜索,我们开设全局数组F[x][y]记录从(x,y)出发到终点路 径的最大权值和,一开始全部初始化为-1表示未被计算过。在计算Dfs(x,y) 时,首先查询F[x][y],如果F[x][y]不等于-1,说明Dfs(x,y)之前已经被计算过, 直接返回 F[x][y]即可,否则计算出Dfs(x,y)的值并存储在F[x][y]中。
w 最优化原理与无后效性
2、动态规划的无后效性原则。所谓无后效性原则,指的是这样一种 性质:某阶段的状态一旦确定,则此后过程的演变不再受此前各状态及 决策的影响。也就是说,“未来与过去无关”,当前的状态是此前历史 的一个完整的总结,此前的历史只能通过当前的状态去影响过程未来的 演变。在例题1最短路径问题中,问题被划分成各个阶段之后,阶段K中 的状态只能由阶段K+1中的状态通过状态转移方程得来,与其它状态没 有关系,特别与未发生的状态没有关系,例如从Ci到E的最短路径,只与 Ci的位置有关,它是由Di中的状态通过状态转移方程得来,与E状态,特 别是A到Ci的路径选择无关,这就是无后效性。
具体计算过程如下:
S1: K = 4 有 F4(D1)= 3, F4(D2)= 4, F4(D3)= 3;

9%%-第9章信息学奥赛试题精解

9%%-第9章信息学奥赛试题精解
(1)编号为1的牌堆上的牌,只能移到编号为2的牌堆上(因为编 号为1的牌堆左侧没有牌堆);
(2)编号为N的牌堆上的牌,只能移到编号为N-1的牌堆上(因为 其右侧没有牌堆);
(3)其他牌堆上的牌(例如编号为i的牌堆),可以向左移(编号 为i-1的牌堆)或向右移(编号为i+1的牌堆)。
现在要你设计一个程序,用最少的移动次数使每堆上纸牌的数量 相同。
例如:有4个整数8、11、12、13,用其中的3个数进行相加,可得 到如下所示的4种组合:
– 8+11+12=31 – 8+11+13=32 – 8+12+13=34 – 11+12+13=36
在以上的4个和值中,只有8+11+12=31的结果为素数。 现在要求你编写程序,计算给定n个整数,从中选中k个整数进行组 合相加,其和值为素数的情况有多少种?
9.2 NOIP提高组试题精解
9.2.4 调整队形
合唱队的队员在演出时一般是按这种形式排列队伍:最高的队员 排在中间,然后各队员按身高降序向两侧排列。设有K位合唱队员, 从左到右依次编号为1、2、…、K,他们的身高分别为T1、T2、…、 TK,则他们的身高满足T1<T2...< Ti > Ti+1 > … TK-1 >TK (1<=i<=K)。
9.1 NOIP普及组试题精解
9.1.3 计算卒的路线
在中国象棋中,卒过了界河以后不仅可以向前移动,也可以横向移 动。现在假设有一个过河的卒位地图9-3所示的A点,要使该卒从A点移 到B点(目标位置)可有多少种不同的路线?

1
2
3
4
5
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第九单元习题解答第1课
1、D
2、A
3、D
4、问题分析
(1)三分法
n=2~3,1次。

n=4~9,2次。

……
把n转换成三进制数,比较下面的不等式:
(1000…0)
3<n ≤(10000…0)
3
假设 m个0 假设m+1个0 则称重次数最多就是m+1次。

比如n=26,26=(222)
3,(100)
3
<(222)
3
≤(1000)
3
,所以要称3次,
与10~27个的做法一样。

那么,具体怎么称呢?
将n转换成若干个三进制数(只有1个1和若干个0组成)的和:
26=(100)
3+(100)
3
+(10)
3
+(10)
3
+(1)
3
+(1)
3
也就是要把伪币分成6份:9、9、3、3、1、1。

第1次,天平两边各放9个,若平衡,则为情况1,不平衡为情况2。

情况1:第2次,天平两边各放3个,若平衡则为情况1.1,否则为情况1.2。

情况1.1:第3次,把天平两边各放1个,立刻找出重的假币。

情况1.2:将重的那边3个分成3份:1、1、1,第3次即可称出。

情况2:将重的那边9个分成:3、3、3,转换成情况1,最多再用2次称出。

(2)本题稍做改动,设12个硬币里有1各假币,但不知道伪币比真币轻还是重,问最少称几次可以找出。

还是用三分法,但是情况要复杂的多,详细见下表:
7、问题分析
将'i','v','x','l','c','d','m'存入常量数组。

把十进制数逐位转换成罗马数字,并按照位数(即第几位)计算数组下标。

例如3802:
2:'i'+'i' (位数:1,i的下标是1*2-1=1)
0:'' (位数:2,空)
8:'d'+'c'+'c'+'c' (位数:3,d的下标是3*2=6,
c的下标是3*2-1=5)
3:'m'+'m'+'m' (位数:4,m的下标是4*2-1=7)
连接起来,得'mmmdcccii'。

事实上,真正的罗马数字中99绝不能用来'ic'表示,而只能用'xcix'。

当然,本程序给出的答案是真正的罗马数字。

第2课
1、不难发现:A[n]=2A[n-1]+2,特别的,A[1]=2。

证明如下:要将 A 柱上的 2n 个盘子移到 C 柱上,
最佳的策略就是先将(2n-2)个盘子借助 C 柱移到 B 柱上,
所需的次数为 A[n-1],再将 A 柱上最大的两个盘子直接移到 C 柱上,
所需的次数为 2,
最后将 B 柱上的(2n-2)个盘子借助 A 柱移到 C 柱上,
所需的次数为 A[n-1]。

总次数 A[n]=A[n-1]+2+A[n-1]
不断带入求A[n],进而可以得出:A[n]=2^(n+1)-2
然后使用高精度计算
4、见“cet.ppt”
第5课
1、B
2、AB
3、A
4、输出:2322
第8课
1、D
2、C。

相关文档
最新文档