1103 正方形与长方形个数【NOIP1997普及组】1104 2的幂次方【NOIP1998普及组】
2019年全国青少年信息学(计算机)奥林匹克分区联赛普及组复赛试题

NOIP2002普及组解题报告题一:级数求和[问题描述]::Sn=1+1/2+1/3+…+1/n。
显然对于任意一个整数K,当n足够大的时候,Sn大于K。
现给出一个整数K〔1<=K<=15〕,要求计算出一个最小的n,使得Sn>K[问题分析]:这道题目非常简单,题目的意思已经把该题的算法描述得再清楚不过了,初始时Sn=0,n=0,然后每次循环n←n+1,Sn←Sn+1/n,,直到Sn大于K,最后输出K。
另外实型(Real 是最慢的,建议用Extended)的运算速度不是很快,而K为1~15之间的整数,所以最后可以交一张表〔常量数组〕,以达到最好的效果[参考程序]:programc1;varK:Byte;n:Longint;Sn:Extended;beginReadln(K);Sn:=0;n:=0;RepeatInc(n);Sn:=Sn+1/n;UntilSn>k;Writeln(n);end.题二:选数[问题描述]:n〔1<=n<=20〕个整数x1,x2,…,xn〔1<=xi<=5000000〕,以及一个整数k〔k<n〕。
从n 个整数中任选k个整数相加,可分别得到一系列的和。
现在,要求你计算出和为素数共有多少种。
[问题分析]:此题动态规划无从下手,也无数学公式可寻,看来只能搜索〔组合的生成算法〕,其实1<=n<=20这个约束条件也暗示我们此题搜索是有希望的,组合的生成可用简单的DFS来实现,既搜索这k个整数在原数列中的位置,由于组合不同于排列,与这k个数的排列顺序无关,所以我们可以令a[I]<a[I+1]〔a[I]表示第I个数在原数列中的位置〕,这个组合生成算法的复杂度大约为C(n,k),下面给出递归搜索算法的框架:接下来的问题就是判断素数,判断一个整数P(P>1)是否为素数最简单的方法就是看是否存在一个素数a(a<=sqrt(P))是P的约数,如果不存在,该数就为素数,由于在此题中1<=xi<=5000000,n<=20,所以要判断的数P不会超过100000000,sqrt(p)<=10000,因此,为了加快速度,我们可以用筛选法将2…10000之间的素数保存到一个数组里〔共1229个〕,这样速度估计将提高5~6倍。
noip2010初赛普及组c试题及答案

第十六届全国青少年信息学奥林匹克联赛初赛试题(普及组 C++语言两小时完成)一、单项选择题(共20题,每题1.5分,共计30分。
每题有且仅有一个正确选项。
)1.2E+03表示()。
A.2.03 B.5 C.8 D.20002.一个字节(byte)由()个二进制位组成。
A.8 B.16 C.32 D.以上皆有可能3.以下逻辑表达式的值恒为真的是()。
A.P V(¬PΛQ)V(¬PΛQ) B.Q V(¬PΛQ)V(PΛ¬Q)C.P V Q V(PΛ¬Q)V(¬PΛQ) D.P V¬Q V(PΛ¬Q)V(¬PΛ¬Q)4.Linux下可执行文件的扩展名为()。
A.exe B.com C.dll D.以上都不是5.如果树根算第1层,那么一棵n层的二叉树最多有()个结点。
A.2n-1 B.2n C.2n+1 D.2n+16.提出“存储程序”的计算机原理的是()。
A.克劳德·香农B.戈登·摩尔C.查尔斯·巴比奇D.冯·诺依曼7.设X、Y、Z分别代表三进制下的一位数字,若等式XY+ZX=XYX在三进制下成立,那么同样在三进制下,等式XY*ZX=( )也成立。
10 21A.YXZ B.ZXY C.XYZ D.XZY8.Pascal语言、C语言和C++语言都属于()。
A.面向对象语言B.脚本语言C.解释性语言D.编译性语言9.前缀表达式“+3*2+5 12”的值是()。
A.23 B.25 C.37D.6510.主存储器的存取速度比中央处理器(CPU)的工作速度慢得多,从而使得后者的效率受到影响。
而根据局部性原理,CPU所访问的存储单元通常都趋于聚集在一个较小的连续区域中。
于是,为了提高系统的整体执行效率,在CPU中引入()。
A.寄存器B.高速缓存C.闪存D.外存11.一个字长为8位的整数的补码是1111 1001,则它的原码是()。
记数问题(NOIP普及组2013第一题)参考答案

记数问题(NOIP普及组2013第一题)参考答案记数问题(NOIP普及组2013第一题);(count.cpp/c/pas);描述;试计算在区间1到n的所有整数中,数字x(0≤x≤;【输入】;输入文件名为count.in;输入共1行,包含2个整数n、x,之间用一个空格隔;【输出】;输出文件名为count.out;输出共1行,包含一个整数,表示x出现的次数;【输入输出样例】;count.incount.ou 记数问题(NOIP普及组2013第一题)(count.cpp/c/pas)描述试计算在区间 1 到 n 的所有整数中,数字x(0 ≤ x ≤ 9)共出现了多少次?例如,在 1 到 11 中,即在 1、2、3、4、5、6、7、8、9、10、11 中,数字 1 出现了 4 次。
【输入】输入文件名为 count.in。
输入共 1 行,包含 2 个整数 n、x,之间用一个空格隔开【输出】输出文件名为 count.out。
输出共 1 行,包含一个整数,表示 x 出现的次数。
【输入输出样例】count.in count.out11 1 4限制每个测试点1s。
【数据说明】对于 100%的数据,1≤ n ≤ 1,000,000,0 ≤ x ≤ 9。
参考答案如下:/* HELLO.C -- Hello, world */#include "stdio.h"#include "conio.h"int count(int n,int x){int sum;sum=0;while(n!=0){if(n%10==x)sum++;n=n/10;}return sum;}main(){int n,x,i,sum;sum=0;scanf("%d %d",&n,&x); for(i=1;i<=n;i++) {sum=count(i,x)+sum; }printf("%d \n",sum); getch();}。
noip普及组复赛模拟试题6

1.计算机发明之前,数学家们需要手工进行数学计算。
遇到复杂计算往往要花去大量时间,而且正确率也不高。
现在可不一样了,有了计算机人们能快速而正确地求解数学问题。
小雪是个中学生,可已经能熟练的运用计算机编写程序了。
为了提高自己的计算机水平,小学经常将数学老师布置的题目用计算机加以求解。
有一次,数学老师提出这样一个问题:对于给定的一对自然数m 与n )(n m 在m 与n 之间(包含m 和n )有多少素数呢?小雪很快得出了答案。
现在请你也编写程序实现。
(1不为素数)输入:文件的第一行为一个数k ,表示有k 对自然数。
以后k 行每行有两个自然数,第一个自然数为m ,第二个自然数为n 。
输出:依次输出每一对数之间的素数个数。
每个结果占一行。
例如:输入:21 510 20输出:342.当前有面值分别为a 分,b 分,c 分,d 分(a>b>c>d)的硬币,请给出找n 分钱的最佳方案(要求找出的硬币数目最少)输入:a,b,c,d,n输出:硬币各几个例:输入:25 10 5 1 36输出:25 10 5 11 1 0 1又例:输入:10 8 5 1 13输出: 10 8 5 10 1 1 03.在下面的算式中每个“#”都表示一个素数数字。
###* ###—————#####请编写程序确定这些数字,输出所有的解。
注意:ABC*DEF 与DEF*ABC 为同一种解的两种不同形式。
请不要将同一组解以不同形式多次输出。
屏幕输出:依次打印输出每一种解。
每行表示一种解,格式为:###*### = ##### 4.一个整数被称为“怪数”,它至少有两对因数,并且其中有一对因数的差等于另一对因数的和。
例如:6是怪数,因为6 × 1 = 6, 2 × 3 = 6, 6 - 1 = 2 + 3;24也是怪数,因为12 - 2 = 6 + 4。
编程输入A和B表示的整数区间(1 ≤ A ≤ B ≤ 32767),输出该区间的所有怪数,一行一个,若没有输出为空。
NOIP2012普及组模拟试题

NOIP2012模拟试题(普及组)题目名称骰子约数和旅行逆序统计文件名dice factor j5 count 测试点数 5 10 5 10 分值100 100 100 100时限1s 0.5~1.5s 1s 1s说明:1、文件名(程序名和输入输出文件名)必使用小写2、程序存放:先建汉字姓名(就是一般的考试号)文件夹,然后在这个文件夹内分别建程序名文件夹,把相应编好的的程序文件放入其中,打包汉字姓名文件夹上交邮箱评测。
1、骰子(dice pas/c/cpp)【题目描述】让我们一起来看下.一个放在桌面上的骰子,如图1所示数字1在上方,数字2在South(南)方位,数字3在East(东)方位,每一对相反方位的数字之和是7,按照上述.数字5在North(北)方位,数字4在west(西)方位,数字6在下方,如图l所示.数字4,5,6在图1中是看不到的。
骰子的初始位置如图1所示.按照下列 6条规则旋转骰子,规则如图2和图3所示:图2中所示的4条旋转规则是将骰子按照规则指定的方位旋转90度。
图3中所示的2条旋转规则是将骰子沿水平方向分别向left(左)或Right(右)方位旋转90度图3.旋转规则Left(左)、Right(右)你的任务是编写一个程序,从图l所示的方位开始,根据给定的一系列规别连续的旋转骰子.程序要求输出旋转骰子过程中位于上方的数字之和(其中包括图1所示的初始方位上的数字1)。
【输入格式】第一行输入一个整数n(n≤1000),表示执行旋转的总步数。
第2~n-1行分别输入6条旋转规则中6个方位中的一个【输出格式】最后一行输出旋转过程中位于骰子上方的数字之和【样例输入输出1】dice.in dice.out5 21NorthNorthEastSouthWest【样例输入输出2】dice.in dice.out8 34WestNorthLeftSouthRightNorthLeftEast2.约数和(factor.pas/c/cpp)【题目描述】给你一个数N,需要你卑出这个数所有约数的和。
NOIP+提高组复赛试题汇编(1998-2009)

NOIP 19981.火车从始发站(称为第1站)开出,在始发站上车的人数为a ,然后到达第2站,在第2站有人上、下车,但上、下车的人数相同,因此在第2站开出时(即在到达第3站之前)车上的人数保持为a 人。
从第3站起(包括第3站)上、下车的人数有一定规律:上车的人数都是前两站上车人数之和,而下车人数等于上一站上车人数,一直到终点站的前一站(第n-1站),都满足此规律。
现给出的条件是:共有N 个车站,始发站上车的人数为a ,最后一站下车的人数是m (全部下车)。
试问x 站开出时车上的人数是多少?2.设有n 个正整数(n ≤20),将它们联接成一排,组成一个最大的多位整数。
例如:n=3时,3个整数13,312,343联接成的最大整数为:34331213又如:n=4时,4个整数7,13,4,246联接成的最大整数为:74246133.著名科学家卢斯为了检查学生对进位制的理解,他给出了如下的一张加法表,表中的字母代表数字。
例如:其含义为:L+L=L ,L+K=K ,L+V=V ,L+E=E K+L=K ,K+K=V ,K+V=E ,K+E=KLE+E=KV根据这些规则可推导出:L=0,K=1,V=2,E=3同时可以确定该表表示的是4进制加法NOIP 1999第一题拦截导弹某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统。
但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度。
某天,雷达捕捉到敌国的导弹来袭。
由于该系统还在试用阶段,所以只有一套系统,因此有可能不能拦截所有的导弹。
输入导弹依次飞来的高度(雷达给出的高度数据是不大于30000的正整数),计算这套系统最多能拦截多少导弹,如果要拦截所有导弹最少要配备多少套这种导弹拦截系统。
样例:INPUTOUTPUT389207155300299170158656(最多能拦截的导弹数)2(要拦截所有导弹最少要配备的系统数)输入:a ,n ,m 和x输出:从x 站开出时车上的人数。
NOIP2014初赛普及组试题知识点分析
第二十届全国青少年信息学奥林匹克联赛初赛普及组C++语言试题2014年一、快单项选择题(共20题,每题1.5分,共计30分;每题有且仅有一个正确选项)1.以下哪个是面向对象的高级语言()。
A.汇编语言B.C++C.FortranD.Basic【知识点】计算机语言基础常识【掌握度】了解【知识分析】面向对象语言是一类以对象作为基本程序结构单位的程序设计语言,指用于描述的设计是以对象为核心,而对象是程序运行时刻的基本成分。
语言中提供了类、继承等成分,有识认性、多态性、类别性和继承性四个主要特点。
而面向对象只是一种编程思想。
汇编语言:低级语言C++:面向对象高级语言Fortran:高级语言Basic:高级语言⒉1TB代表的字节数是()。
A.2的10次方B.2的20次方C.2的30次方D.2的40次方【知识点】计算机存储进制换算【掌握度】掌握【知识分析】1KB = 1024B = 210B1MB = 1024KB = 220B1GB = 1024MB = 230B1TB = 1024GB = 240B⒊二进制数00100100和00010101的和是()。
A.00101000B.001010100C.01000101D.00111001【知识点】二进制运算【掌握度】掌握⒋以下哪一种设备属于输出设备()。
A.扫描仪B.键盘C.鼠标D.打印机【知识点】计算机组成原理【掌握度】掌握【知识分析】硬件组成:控制器(Control):是整个计算机的中枢神经,其功能是对程序规定的控制信息进行解释,根据其要求进行控制,调度程序、数据、地址,协调计算机各部分工作及内存与外设的访问等。
运算器(Datapath):运算器的功能是对数据进行各种算术运算和逻辑运算,即对数据进行加工处理。
存储器(Memory):存储器的功能是存储程序、数据和各种信号、命令等信息,并在需要时提供这些信息。
输入设备(Input system):输入设备是计算机的重要组成部分,输入设备与输出设备合称为外部设备,简称外设,输入设备的作用是将程序、原始数据、文字、字符、控制命令或现场采集的数据等信息输入到计算机。
NOIP2013复赛普及组试题
NOIP2013复赛普及组试题CCF全国信息学奥林匹克联赛(NOIP2013)复赛普及组(请选手务必仔细阅读本页内容)一.题目概况三.编译命令(不包含任何优化开关)注意事项:1、文件名(程序名和输入输出文件名)必须使用英文小写。
2、C/C++中函数main()的返回值类型必须是int,程序正常结束时的返回值必须是0。
3、全国统一评测时采用的机器配置为:CPU AMD Athlon(tm) 64x2 Dual Core CPU 5200+,2.71GHz,内存2G,上述时限以此配置为准。
4、只提供Linux 格式附加样例文件。
5、特别提醒:评测在NOI Linux 下进行。
1.记数问题(count.cpp/c/pas)【问题描述】试计算在区间1 到n 的所有整数中,数字x (0 ≤ x ≤ 9)共出现了多少次?例如,在1 到11 中,即在1、2、3、4、5、6、7、8、9、10、11 中,数字1 出现了4 次。
【输入】输入文件名为count.in。
输入共1 行,包含2 个整数n、x,之间用一个空格隔开。
【输出】输出文件名为count.out。
输出共1 行,包含一个整数,表示x 出现的次数。
【输入输出样例】【数据说明】对于100%的数据,1≤ n ≤ 1,000,000,0 ≤ x ≤ 9。
2.表达式求值(expr.cpp/c/pas)【问题描述】给定一个只包含加法和乘法的算术表达式,请你编程计算表达式的值。
【输入】输入文件为expr.in。
输入仅有一行,为需要你计算的表达式,表达式中只包含数字、加法运算符“+”和乘法运算符“*”,且没有括号,所有参与运算的数字均为0 到231-1 之间的整数。
输入数据保证这一行只有0~ 9、+、*这12 种字符。
【输出】输出文件名为expr.out。
输出只有一行,包含一个整数,表示这个表达式的值。
注意:当答案长度多于4 位时,请只输出最后4 位,前导0 不输出。
【输入输出样例1】【输入输出样例2】【输入输出样例3】【输入输出样例说明】样例1 计算的结果为8,直接输出8。
[NOIP]-CCFNOIP2018普及组初赛试题+答案
[NOIP]-CCFNOIP2018普及组初赛试题+答案第24届全国青少年信息学奥林匹克联赛初赛普及组C++语⾔试题竞赛时间:2018 年 10 ⽉ 13 ⽇ 14:30~16:30选⼿注意:1、试题纸共有 7 页,答题纸共有 2 页,满分 100 分。
请在答题纸上作答,写在试题纸上的⼀律⽆效。
2、不得使⽤任何电⼦设备(如计算器、⼿机、电⼦词典等)或查阅任何书籍资料。
⼀、单项选择题(共15题,每题2分,共计30分;每题有且仅有⼀个正确选项)1. 以下哪⼀种设备属于输出设备:( )A.扫描仪B.键盘C.⿏标2. 下列四个不同进制的数中,与其它三项数值上不相等的是( )。
A. (269)16 (注解:2 * 16^2 + 6 * 16^1 + 9 * 16 ^0 = 617)B. (617)10C. (1151)8 (注解:1 * 8^3 + 1 * 8^2 + 5 * 8^1 + 1 * 8^0 = 617)23. 1MB等于( )。
A. 1000 字节B. 1024 字节C. 1000 X 1000字节4. ⼴域⽹的英⽂缩写是( )。
A. LAN(Wide Area Network)C. MAND.LNA5. 中国计算机学会于( )年创办全国青少年计算机程序设计竞赛。
A. 1983C. 1985D. 19866. 如果开始时计算机处于⼩写输⼊状态,现在有⼀只⼩⽼⿏反复按照 CapsLock、字母键 A、字母键S、字母键 D、字母键 F 的顺序循环按键,即CapsLock、A、S、D、F、CapsLock、A、S、D、F、......,屏幕上输出的第 81 个字符是字母 ( )。
B. SC. DD. a7. 根节点深度为 0,⼀棵深度为 h 的满 k(k>1)叉树,即除最后⼀层⽆任何⼦节点外,每⼀层上的所有结点都有k个⼦结点的树,共有( )个结点。
C. k hD. (k h-1) / (k - 1)8. 以下排序算法中,不需要进⾏关键字⽐较操作的算法是( )。
NOIP2018普及组复赛试题
T1: 标题统计题目描述凯凯刚写了一篇美妙的作文,请问这篇作文的标题中有多少个字符?注意:标题中可能包含大、小写英文字母、数字字符、空格和换行符。
统计标题字符数时,空格和换行符不计算在内。
输入输入文件只有一行,一个字符串 s。
输出输出文件只有一行,包含一个整数,即作文标题的字符数(不含空格和换行符)。
样例输入样例输出【输入输出样例 1 说明】标题中共有 3 个字符,这 3 个字符都是数字字符。
【输入输出样例 2 说明】标题中共有 5 个字符,包括 1 个大写英文字母,1 个小写英文字母和 2 个数字字符,还有 1 个空格。
由于空格不计入结果中,故标题的有效字符数为 4 个。
【数据规模与约定】规定 |s| 表示字符串 s 的长度(即字符串中的字符和空格数)。
对于 40% 的数据,1 ≤ |s| ≤ 5,保证输入为数字字符及行末换行符。
对于 80% 的数据,1 ≤ |s| ≤ 5,输入只可能包含大、小写英文字母、数字字符及行末换行符。
对于 100% 的数据,1 ≤ |s| ≤ 5,输入可能包含大、小写英文字母、数字符、空格和行末换行符T2: 龙虎斗题目描述轩轩和凯凯正在玩一款叫《龙虎斗》的游戏,游戏的棋盘是一条线段,线段上有n个兵营(自左至右编号 1 ∼n),相邻编号的兵营之间相隔 1 厘米,即棋盘为轩轩在左侧,代表“龙”;凯凯在右侧,代表“虎”。
他们以 m 号兵营作为分游戏过程中,某一刻天降神兵,共有 s1位工兵突然出现在了 p1号兵营。
作为输入输入文件的第一行包含一个正整数n,代表兵营的数量。
接下来的一行包含 n 个正整数,相邻两数之间以一个空格分隔,第 i个正整数代表编号为 i 的兵营中起始时的工兵数量 ci。
接下来的一行包含四个正整数,相邻两数间以一个空格分隔,分别代表m,p1,s1,s2。
输出输出文件有一行,包含一个正整数,即 p2,表示你选择的兵营编号。
如果存在多个编号同时满足最优,取最小的编号。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
正方形与长方形个数【NOIP1997普及组】
Time Limit:10000MS Memory Limit:65536K
Total Submit:6 Accepted:6
Description
设有一个n*m方格的棋盘( 1 ≤ m , n ≤ 50 ),求出该棋盘中包含多少个正
方形、多少个长方形(不包括正方形)。
程序要求:输入:n和m 输出:正方形的个数与长方形的个数
如上例:输入:2 3 输出:8,10
Input
一行,n m
Output
正方形的个数与长方形的个数,两个数值之间有一个空格。
Sample Input
2 3
Sample Output
8 10
Source
var
i,j,n,m,a,b,k:longint;
begin
readln(n,m);
a:=0; b:=0; k:=n;
if k>m then k:=m;
for i:=1 to k do
a:=a+(n-i+1)*(m-i+1);
for i:=1 to n do
for j:=1 to m do
b:=b+(n-i+1)*(m-j+1);
writeln(a,' ',b-a);
end.
2的幂次方【NOIP1998普及组】
Time Limit:10000MS Memory Limit:65536K
Total Submit:12 Accepted:6
Description
任何一个正整数都可以用2的幂次方表示。例如:
137=2^7+2^3+2^0
同时约定方次用括号来表示,即a^b 可表示为a(b)。
由此可知,137可表示为:
2(7)+2(3)+2(0)
进一步:7= 2^2+2+2^0 (2^1用2表示)
3=2+2^0
所以最后137可表示为:
2(2(2)+2+2(0))+2(2+2(0))+2(0)
又如:
1315=2^10 +2^8 +2^5 +2+1
所以1315最后可表示为:
2(2(2+2(0))+2)+2(2(2+2(0)))+2(2(2)+2(0))+2+2(0)
输入:正整数(n≤20000)
输出:符合约定的n的0,2表示(在表示中不能有空格)
Input
正整数n(n≤20000)
Output
符合约定的n的0,2表示(在表示中不能有空格)
Sample Input
137
Sample Output
2(2(2)+2+2(0))+2(2+2(0))+2(0)
Source
var
n:longint;
procedure dry(n:longint);
var i,j,l:longint;
p:boolean;
a:array[1..1000]of longint;
begin
l:=0; i:=n;
fillchar(a,sizeof(a),0);
while i<>0 do begin
inc(l); a[l]:=i mod 2; i:=i div 2;
end;
p:=false;
for i:=l downto 1 do if a[i]<>0 then begin
if p then write('+')
else p:=true;
if i=1 then write('2(0)');
if i=2 then write('2');
if i>2 then begin
write('2(');
dry(i-1);
write(')');
end;
end;
end;
begin
readln(n);
dry(n);
writeln;
end.