noip2014普及组复赛题解
NOIP2014初赛普及组C++题目及答案

NOIP2014初赛普及组C++题目及答案第二十届全国青少年信息学奥林匹克联赛初赛普及组C++语言试题2014年一、快单项选择题(共20题,每题1.5分,共计30分;每题有且仅有一个正确选项)⒈以下哪个是面向对象的高级语言( )。
A.汇编语言B.C++C.FortranD.Basic⒉1TB代表的字节数是( )。
A.2的10次方B.2的20次方C.2的30次方D.2的40次方⒊二进制数00100100和00010101的和是( )。
A.00101000B.001010100C.01000101D.00111001⒋以下哪一种设备属于输出设备( )。
A.扫描仪B.键盘C.鼠标D.打印机⒌下列对操作系统功能的描述最为完整的是( )。
A.负责外设与主机之间的信息交换B.负责诊断机器的故障C.控制和管理计算机系统的各种硬件和软件资源的使用D.将没有程序编译成目标程序⒍CPU、存储器、I/O设备是通过( )连接起来的。
A.接口B.总线C.控制线D.系统文件⒎断电后会丢失数据的存储器是( )。
A.RAMB.ROMC.硬盘D.光盘⒏以下哪一种是属于电子邮件收发的协议( )。
A.SMTPB.UDPC.P2PD.FTP⒐下列选项中不属于图像格式的是( )。
A.JPEG格式B.TXT格式C.GIF格式D.PNG格式⒑链表不具有的特点是( )。
A.不必事物估计存储空间B.可随机访问任一元素C.插入删除不需要移动元素D.所需空间与线性表长度成正比⒒下列各无符号十进制整数中,能用八位二进制表示的数中最大的是( )。
A.296B.133C.256D.199⒓下列几个32位IP地址中,书写错误的是( )。
A.162.105.135.27B.192.168.0.1C.256.256.129.1D.10.0.0.1⒔要求以下程序的功能是计算:s=1+1/2+1/3+...+1/10。
#include <iostream>using namespace std;int main(){int n;float s;s = 1.0;for(n = 10; n > 1; n--)s = s + 1 / n;cout << s << endl;return 0;}程序运行后输出结果错误,导致错误结果的程序行是( )。
noip2014普及组初赛试题+答案

NOIP 2014 第二十届全国青少年信息学奥林匹克联赛初赛普及组C++语言试题竞赛时间:2014 年10月11日14:30〜16:30选手注意:1、 试题纸共有 5页,答题纸共有 2页,满分100分。
请在答题纸上作答,写在试题 纸上的一律无效。
2、 不得使用任何电子设备(如计算器、手机、电子词典等)或查阅任何书籍资料。
A.负责外设与主机之间的信息交换B.负责诊断机器的故障C.控制和管理计算机系统的各种硬件和软件资源的使用D.将没有程序编译成目标程序6. CPU 、存储器、 A.接口 B.总线 C.控制线7•断电后会丢失数据的存储器是 A.RAM B.ROM C.硬盘8•以下哪一种是属于电子邮件收发的协议12•下列几个32位IP 地址中,书写错误的是 ( )。
A.162.105.135.27B.192.168.0.1C.256.256.129.1 13•要求以下程序的功能是计算: s=1+1/2+1/3+...+1/10 #in elude <iostream>一、单项选择题(共20题,每题1.51.以下哪个是面向对象的高级语言(A.汇编语言B.C++C.Fortran2. 1TB 代表的字节数是()。
A.2的10次方 B.2的20次方分,共计 )。
D.Basic30分;每题有且仅有一个正确选项 )C.2 的 30 的和是( A.00101000B.001010100C.010001014•以下哪一种设备属于输出设备( )。
A.扫描仪B.键盘C.鼠标D.打印机5•下列对操作系统功能的描述最为完整的是 ( 次方 D.2的40次方)。
D.00111001I/O 设备是通过()连接起来的。
D.系统文件 (A.SMT PB.UD PC.P2PD.FT P9•下列选项中不属于图像格式的是(A.JPEG 格式B.TXT 格式C.GIF 10.链表不具有的特点是( A.不必事物估计存储空间 C.插入删除不需要移动元素11•下列各无符号十进制整数中,A.296B.133C.256 )。
noip2014普及组复赛题解

1.珠心算测验注意看清题意:其中有多少个数,恰好等于集合中另外两个(不同的)数之和。
这样的题意加上100的规模,建议暴力3个for:#include<cstdio>#include<cstring>#include<algorithm>#include<iostream>using namespace std;int n;int a[105];int main(){freopen("count.in","r",stdin);freopen("count.out","w",stdout);scanf("%d",&n);for(int i=1; i<=n; i++){scanf("%d",&a[i]);}sort(a+1,a+n+1);int res=0;for(int i=1; i<=n; i++){int ok=0;for(int j=1; j<=n && !ok; j++) if(j!=i){for(int k=1; k<=n && !ok; k++) if(a[k]!=a[j]){if(a[j]+a[k]==a[i]) ok=1;}}res+=ok;}printf("%d\n",res);return 0;}2.比例简化L很小,还是枚举,然后比较的话建议用乘法比较,避免精度问题:#include<cstdio>#include<cstring>#include<iostream>using namespace std;int A,B,L;int gcd(int a,int b){if(b==0) return a;return gcd(b,a%b);}int main(){freopen("ratio.in","r",stdin);freopen("ratio.out","w",stdout);scanf("%d%d%d",&A,&B,&L);int ba=1000000,bb=1;for(int i=1; i<=L; i++){for(int j=1; j<=L; j++){if(gcd(i,j)==1 && i*B>=j*A){if(ba*j>=bb*i){ba=i, bb=j;}}}}printf("%d %d\n",ba,bb);return 0;}3.螺旋矩阵没一圈的数量有规律的,最外面一圈(n-1)*4,然后每往里n-2,直到后要么只有一个点,要么4个点。
NOIP2014 普及组 解题报告

f[i,j]:=min{f[i-1,k]+|a[j]-a[k]|} (i≤k<j)
这里,f 是状态数组,a 储存原始序列。注意,所有的加数都在 min 的大括号中。这是一个时间 复杂度为 O(n3)的二维 DP。有了这个方程,我们再回到原问题。思考以后发现,要想直接把这个方 程升级到二维是十分困难的。注意到“1≤n,m≤16”这个数据范围,想到,可不可以一半搜索一半 DP 呢?答案是肯定的。我们可以任选行或列进行搜索(以搜索行为例),每次穷搜到的结果是一个有 r 个元素的行标序列。接下来,对于每一列 j,我们就可以将 a[ik,j](k 表示所有当前被搜中的行) 作为一个整体。对于在一维序列中的代价“|a[j]-a[k]|”,在二维矩阵中可以把它分解为上下两 个元素的“纵差”和左右两个元素的“横差”,在每次 DP 之前进行初始化。这样就把二维矩阵压缩 成了一维序列,可以应用刚才的状态转移方程了——当然还要变换一下:
assign(output,'count.out'); rewrite(output); readln(n); for i:=1 to n do read(a[i]); fillchar(b,sizeof(b),false); for i:=1 to n-1 do for j:=i+1 to n do b[a[i]+a[j]]:=true; ans:=0; for i:=1 to n do if b[a[i]] then inc(ans); writeln(ans); close(input); close(output) End.
-代码见下页-
第 4 页 共 13 页
NOIP2014 普及组 解题报告
By yearwhk
【参考代码】
2014noip复赛模拟练习2(答案)

1.某监狱里有个很长的走廊,走廊中一个接一个地有N个房间。
每个房间中锁着一个犯人。
一天夜里,狱警决定玩一个无聊游戏。
第1轮中,他喝了一口威士忌,然后打开每个房间。
第2轮,他喝了一口威士忌,然后按2的倍数遍历每个房间。
第3轮,他又喝了一口威士忌,然后遍历所有3的倍数的房间。
依次类推。
在遍历中,如果房间是锁着的,则打开;否则锁上。
他这样重复N轮,最终醉酒。
这时有些囚犯看到自己房间的锁被打开了,他们立即逃跑。
对于有N个房间的走廊,最终会有多少囚犯逃脱?输入:输入数据的第一行中有一个整数,表示有多少组测试数据。
接下来的若干行每行包含一个值为5-100的整数,这是房间的数目。
输出:对应输入数据输出多行,每行一个整数,表示逃脱的囚犯数量。
样例输入:25100样例输出:210var n,num,s,m,i,k,j:integer;a:array[0..200]of boolean;begin readln(num);for i:=1 to num dobegin readln(n);fillchar(a,sizeof(a),true);for j:=1 to n dofor k:=1 to n doif k mod j=0 then a[k]:=not a[k];s:=0;for j:=1 to n doif a[j]=false then inc(s);writeln(s);end;end. 输入3 10 35 50输出3 5 7输入3 22 68 99 输出 4 8 9输入5 10 30 60 85 100 输出 3 5 7 9 10一个自然数,若它的素因数至少是两重的(相同的素因数至少个数为二个,如:24=2*2*2*3,则称该数为“漂亮数”。
若相邻的两个自然数都是“漂亮数”,就称它们为“孪生漂亮数”,例如8和9就是一对“孪生漂亮数”。
输入X,Y,编程找出[X,Y]之间的所有“孪生漂亮数”。
如输入2 25,则输出8 924 25var i,n,a,t,x,y,s:longint; f :boolean;begin readln(x,y);a:=x;repeata:=a+1;n:=a;f:=false; i:= 2 ;while n >= i do begint:=0;while n mod i = 0 do begint:=t+1;n := n div i;end;if t>=2 then f:=true;i := i+1;end;if f then beginn:=a+1;f:=false; i:= 2 ;while n >= i do begint:=0;while n mod i = 0 do begint:=t+1;n := n div i;end;if t>=2 then f:=true;i := i+1;end; end;if f then begin s:=s+1; writeln(a,’‘,a+1);end;until a=y;readln;end.输入50 120输出63 64 75 76 80 81 98 99 99 100 116 117 120 121 输入354 480 输出360 361 363 364 368 369 。
NOIP2014普及组复赛试题

1. 珠心算测验【问题描述】 珠心算是一种通过在脑中模拟算盘变化来完成快速运算的一种计算技术。
珠心算训练,既能够开发智力,又能够为日常生活带来很多便利,因而在很多学校得到普及。
某学校的珠心算老师采用一种快速考察珠心算加法能力的测验方法。
他随机生成一个正整数集合,集合中的数各不相同,然后要求学生回答:其中有多少个数,恰好等于集合中另外两个(不同的)数之和? 最近老师出了一些测验题,请你帮忙求出答案。
【输入】输入文件名为count.in 。
输入共两行,第一行包含一个整数n ,表示测试题中给出的正整数个数。
第二行有n 个正整数,每两个正整数之间用一个空格隔开,表示测试题中给出的正整数。
【输出】输出文件名为count.out 。
输出共一行,包含一个整数,表示测验题答案。
【输入输出样例】 count.in count.out 4 1 2 3 42【样例说明】由1+2=3,1+3=4,故满足测试要求的答案为2。
注意,加数和被加数必须是集合中的两个不同的数。
【数据说明】对于100%的数据,3 ≤ n ≤ 100,测验题给出的正整数大小不超过10,000。
2.比例简化【问题描述】在社交媒体上,经常会看到针对某一个观点同意与否的民意调查以及结果。
例如,对某一观点表示支持的有1498人,反对的有902人,那么赞同与反对的比例可以简单的记为1498:902。
不过,如果把调查结果就以这种方式呈现出来,大多数人肯定不会满意。
因为这个比例的数值太大,难以一眼看出它们的关系。
对于上面这个例子,如果把比例记为5:3,虽然与真实结果有一定的误差,但依然能够较为准确地反映调查结果,同时也显得比较直观。
现给出支持人数A,反对人数B,以及一个上限L,请你将A比B化简为A’比B’,要求在A’和B’均不大于L且A’和B’互质(两个整数的最大公约数是1)的前提下,A’/B’≥A/B 且A’/B’ - A/B的值尽可能小。
【输入】输入文件名为ratio.in。
2014noip普及组复赛测试(答案)

老师给笑笑布置了一份作业,笑笑不知如何解决。
老师给了一串很长的数列,要求从中找出连续的一段来使的总和最大。
【输入文件】:第一行包含一个整数n,表示数列的长度。
(n<=100000)第二行包含n个整数来描述这个数列,每个整数的的绝对值不超过1000。
【文件输出】:文件中只有一个整数,为最大的连续段总和。
【输入样例】:51 -23 1 -4【输出样例】4vars:array[1..10000] of longint;n,ii,t,ans:longint;beginreadln(n);for i:=1 to n doread(s[i]);t:=s[1];ans:=s[1];for i:=2 to n dobeginif t<0 then t:=s[i] else t:=t+s[i];if t>ans then ans:=t;end;writeln(ans);end.输入61 5 4 -2 63 输出17输入1024 -12 9 11 7 20 -8 15 3 18 输出87输入710 8 9 -5 12 6 11 输出51输入205 12 19 20 -7 -6 18 22 19 8 11 33 15 32 17 -30 4 14 24 -13输出230【问题描述】鲁宾逊先生有一只宠物猴,名叫多多。
这天,他们两个正沿着乡间小路散步,突然发现路边的告示牌上贴着一张小小的纸条:“欢迎免费品尝我种的花生!——熊字”。
鲁宾逊先生和多多都很开心,因为花生正是他们的最爱。
在告示牌背后,路边真的有一块花生田,花生植株整齐地排列成矩形网格(如图1)。
有经验的多多一眼就能看出,每棵花生植株下的花生有多少。
为了训练多多的算术,鲁宾逊先生说:“你先找出花生最多的植株,去采摘它的花生;然后再找出剩下的植株里花生最多的,去采摘它的花生;依此类推,不过你一定要在我限定的时间内回到路边。
”我们假定多多在每个单位时间内,可以做下列四件事情中的一件:1)从路边跳到最靠近路边(即第一行)的某棵花生植株;2)从一棵植株跳到前后左右与之相邻的另一棵植株;3)采摘一棵植株下的花生;4)从最靠近路边(即第一行)的某棵花生植株跳回路边。
NOIP2014普及组复赛解题报告

Prolem 1 珠心算测试(count)这道题其实很简单,意思就是说给你一些数a1,a2,a3,a4...a n,然后让你回答有多少个A+B=C(A ≠ B ≠ C)满足(回答C的数量,而不是等式的数量)方法一那么有一种很明显的做法就是三层循环枚举C、A、B,注意:C是在最外层,若找到了一个A和一个B,满足上述等式,则C是一个符合要求的解,这时ans++,并且退出当前枚举,枚举下一个C,这种算法的时间复杂度是O(N3)而我当时没想到这个算法,因为有更好用而且简单更不容易出错的解法,方法二两重循环,分别枚举i=1...n,j=i+1...n,如果ai+aj这个数在集合中存在,那么you[a i+a j]←true,然后再从a1到a n做一次扫描,只要you[a i],ans++这个算法的好处在于它很好写,不用退出什么的,也不用注意循环的顺序,而且时间复杂度是O(N2)代码(方法2):在此征求一下大神的意见,如有更快的做法,敬请奉上小结:这道题很简单,但很多人没有做对的原因就是没有好好理解题意,但是根本原因其实还在于心态太骄傲了,认为是第一题就可以轻视,这样是不好的,水题我们更要做好啊,你想想同样是100分,这100分多么好拿,所以是水题、越该放平心态,细心地做。
当时我正是由于重视(2013年第一题爆零的教训),用了整整15分钟才做好,最后得了100分Problem 2 比例简化这道题目是说,给定A和B,求解一组A’和B’,满足以下条件:A′B′−AB≥00<A′,B′≤LA′和B′互质首先,想一个总体的框架:我们发现L≤100,因此可以枚举A′和B′,然后判断是否A’B’满足上述条件,并且打擂台求比值最小的一组就行了,打擂台的复杂度是O(1)。
设验证的复杂度为O(k),则总的算法的复杂度为O(kL2),其中L2是104,所以我们只要保证k的大小在100以内就一定没有问题。
现在要求两个分数的差值,该怎么办呢?高精除!很多人一下就想到了,当时我在赛场上就是这么想的,但是又仔细一考虑。
2014noip复赛模拟练习1(答案)

【问题描述】请统计某个给定范围[L,R]的所有整数中,数字N出现的次数。
【输入格式】共1行,为三个正整数L、R和N,之间用空格隔开。
(1≤L≤R≤10000)。
【输出格式】仅1行,表示数字N出现的次数。
如输入2 22 2 则输出6var a,b,c,d,e,f,n:integer;beginassign(input,'two.in');reset(input);assign(output,'two.out');rewrite(output);readln(a,b,n);f:=0;d:=0;for c:=a to b dobegine:=c;repeatd:=e mod 10;e:=e div 10;if d=n then inc(f);until e=0;end;writeln(f);close(input);close(output);end.输入2 100 5输出 20 输入 1 1000 9 输出 300输入 2222 2223 2 输出 7 输入 9993 10000 2 输出 02.用自然数1,2,3,4,5,。
构成连续数1234567891011…9899100101…从键盘输入整数m(20000m),输出第m位数字。
样例输入输出:输入:m=15输出:2①m=11②m=194③m=100007④m=199992var p,d,i,j,w,c,m:integer;beginwrite('m=');readln(m);c:=1;i:=1;while c<m do begini:=i+1;w:=1;j:=i;while j>=10 do beginj:=j div 10;w:=w+1;end;c:=c+w;end;d:=c-m+1;for j:=1 to d do beginp:=i mod 10;i:=i div 10;end;writeln(p);end.3.聪明的囚犯:传说从前有一个残暴的国王,喜欢杀戮百姓。
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):输入设备是计算机的重要组成部分,输入设备与输出设备合称为外部设备,简称外设,输入设备的作用是将程序、原始数据、文字、字符、控制命令或现场采集的数据等信息输入到计算机。
2014noip复赛模拟练习7(答案)

【问题描述】对于给定的一个长度为N的正整数数列A[i],现要将其分成连续的若干段,并且每段和不超过M(可以等于M),问最少能将其分成多少段使得满足要求。
【输入文件】输入文件divide_a.in的第1行包含两个正整数N,M,表示了数列A[i]的长度与每段和的最大值,第2行包含N个空格隔开的非负整数A[i],如题目所述。
【输出文件】输出文件divide_a.out仅包含一个正整数,输出最少划分的段数。
【样例输入】5 64 2 45 1【样例输出】3【数据规模与约定】对于20%的数据,有N≤10;对于40%的数据,有N≤1000;对于100%的数据,有N≤100000,M≤109,M大于所有数的最小值,A[i]之和不超过109。
【样例说明】将数列如下划分:[4][2 4][5 1]第一段和为4,第2段和为6,第3段和为6均满足和不超过M=6,并可以证明3是最少划分的段数。
varn,m,t,i,a,ans:longint;beginassign(input,'divide_a.in');assign(output,'divide_a.out');reset(input); rewrite(output);readln(n,m);t:=0; ans:=0;for i:=1 to n do beginread(a);if t+a>m then begininc(ans);t:=a;endelseinc(t,a);end;if t<>0 then inc(ans);writeln(ans);close(input); close(output);end.将合数483的各位数字相加(4+8+3)=15,如果将483分解成质因数相乘: 483=3*7*23,把这些质因数各位数字相加(3+7+2+3),其和也为15。
即某合数的各位数字之和等于它所有质因数的各数字之和。
2014noip复赛模拟练习15(答案)

【试题描述】有一组数(设有N个)。
编一程序交换这组数中任意指定的两段。
【输入描述】一个数N(不超过20个)一行N个数由空格分开两个空格分开的数(表示要交换的其中一段)两个空格分开的数(表示要交换的其中另一段)【输出描述】交换后的一行数(中间用空格隔开)【输入样例】163 6 11 45 23 70 67 34 26 89 90 15 56 50 20 103 513 15【输出样例】3 6 56 50 20 70 67 34 26 89 90 15 11 45 23 10program ex1146;var i,j,n,k,a1,b1,a2,b2:integer;a,b:array[0..20] of longint;procedure make(x,y:integer);var i:integer;beginfor i:=x to y dobegininc(k);b[k]:=a[i];end;end;beginreadln(n);for i:=1 to n do read(a[i]);readln(a1,b1);readln(a2,b2);k:=0;make(1,a1-1);make(a2,b2);make(b1+1,a2-1);make(a1,b1);make(b2+1,n);for i:=1 to n do write(b[i],' ');end.142 15 67 89 10 30 54 11 99 77 23 86 47 362 510 13Shuchu 2 77 23 86 47 30 54 11 99 15 67 89 10 361742年6月7日哥德巴赫写信给当时的大数学家欧拉,正式提出了以下的猜想:任何一个大于9的奇数都可以表示成3个质数之和。
质数是指除了1和本身之外没有其他约数的数,如2和11都是质数,而6不是质数,因为6除了约数1和6之外还有约数2和3。
需要特别说明的是1不是质数。
NOIP2014普及组复赛试题讲解(c++版本)

确定解题思路AC
思路:搜索+DP 枚举出选那些行 算出j列各行之间的分数w[j],k,j两列之间的分数v[k][j]。 f[i][j]表示已经选了i(数量)列,最后一列是j (下标)的最小分数 且第i列是j 状态转移方程:f[i][j]=min(f[i-1][k]+w[j]+v[k][j])。
-6-
第3题 “ 螺旋矩阵”简述
一个n行n列的螺旋矩阵可由如下方法生成: 从矩阵的左上角(第1行第1列)出发,初始时向右移动; 如果前方是未曾经过的格子,则继续前进,否则右转;重 复上述操作直至经过矩阵中所有格子。根据经过顺序,在 格子中依次填入1, 2, 3, ... , n2,便构成了一个螺旋矩阵。 下图是一个n = 4 时的螺旋矩阵。
- 14 -
暴力搜索程序模块
int main() { cin>>n>>m>>row>>col; for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) cin>>a[i][j]; w(1); cout<<ans; return 0; }
- 18 -
试题分析
BYE
温馨提示:
本题解内的程序都已经AC,由
于代码较长,可以查看CPP文件
The END
2017. 07. 28
试题分析
NOIP2014 普及组复赛题解
NOIP2014普及组C++
2017. 07. 28
第1题 “珠心算测验”简述
某学校的珠心算老师采用一种快速考察珠心算加法 能力的测验方法。他随机生成一个正整数集合,集 合中的数各不相同,然后要求学生回答:其中有多 少个数,恰好等于集合中另外两个(不同的)数之 和?
2014noip复赛模拟练习16(答案)

每两行时间为一组,每组中的第一行时间为规定的训练时间,第二行为懒羊羊到达训练场的时间。每行有两个整数H和M,H是以24小时记时法表示的小时数(0 <= H <= 24),M表示分钟数(0 <= M <= 59)。每组中的两个时间表示的是同一天的两个时间。若干组时间后以-1表示结束。
输出
若干行,如果这一天懒羊羊及时到达了训练场,则输出‘Yes’及早到的分钟数;如果没有及时到达,则输出‘No’及迟到的分钟数。
6(=2*3),所以679的变幻数为6。
现在的问题是给定一个子变幻数k,问k的父变幻数最小是多少?
如:k=18,则k的父变幻数可以是29,也可以是92。但最小为29。
数据输入:
一个子变幻数k(位数小于1000)。
数据输出:
k的最小父变幻数。
当不存在父变幻数时请输出“There is no such number!”,输出结果不含引号。
assign(output,'unreal.out');
reset(input);
rewrite(output);
end;
procedure endit;
begin
close(input);
close(output);
end;
begin
init;
a[0]:=0;
while not eof do
if a<60 then begin write('Poor LanYangYang');//如果有一门功课在60分以下那么淘汰,并且退出
exit;
end;
end;
if s=4 then s:=5;//如果四门全优则得5分
writeln(s);
2014noip复赛模拟练习5(答案)

小白的名次题目描述兔子小白是位数学爱好者,有一次它参加了兔界里的数学比赛,成绩公布后,小白很想知道自己的成绩到底排第几,现在请你帮它编一个程序,要求输入一个成绩,就能知道相应的名次。
注意:同分的按相同名次算,且只算一次。
输入输入共三行。
第一行:一个整数n(n<=30000)第二行:n个正整数(这些数不大于1000)。
第三行:一个整数,需要查询的分数。
输出输出共一行。
一个整数,查询成绩的名次。
样例输入730 50 80 60 20 50 6050样例输出3var a:array[0..1000] of integer;i,n ,x,y,s,max:integer;beginreadln(n);for i:=1 to 1000 do a[i]:=-1;max:=0;for i:=1 to n dobeginread(x);if x>max then max:=x;a[x]:=1;end;read(y);i:=max;while (a[i]<>y) and (i>y) dobegin dec(i); if a[i]=1 then inc(s); end;writeln(s+1);end.小s同学出去旅游啦~,小s同学住的宾馆每天早上都会提供丰盛的自助早餐,小s同学最爱吃的就是现烤的切片面包。
但是呢,宾馆的烤面包机很差,虽然说每次最多可以同时烤k块面包,但是只能烤好这些面包的一个面。
小s要想吃上好吃的面包,就需要把面包的两面都烤好。
小s同学一共想吃n块烤面包,但是小s每天都有好多景点需要游览,她不能在早餐上耽误很长时间,因此,小s同学希望你能告诉她最少需要使用几次烤面包机就可以烤好n块面包。
输入输入数据仅有一行包含两个用空格隔开的正整数n和k(n, k<=10),n表示小s同学一共要烤n块面包,k表示宾馆的烤面包机一次最多可以同时烤好k块面包的一个面。
输出仅有一行包含一个整数,表示小s同学至少要用多少次烤面包机。
noip2014普及组初赛试题+答案

NOIP2014第二十届全国青少年信息学奥林匹克联赛初赛普及组C++语言试题竞赛时间:2014年10月11日14:30~16:30选手注意:1、试题纸共有5 页,答题纸共有2 页,满分100 分。
请在答题纸上作答,写在试题纸上的一律无效。
2、不得使用任何电子设备(如计算器、手机、电子词典等)或查阅任何书籍资料。
一、单项选择题(共20题,每题1.5分,共计30分;每题有且仅有一个正确选项)⒈以下哪个是面向对象的高级语言( )。
A.汇编语言B.C++C.FortranD.Basic⒉1TB代表的字节数是( )。
A.2的10次方B.2的20次方C.2的30次方D.2的40次方⒊二进制数00100100和00010101的和是( )。
A.00101000B.001010100C.01000101D.00111001⒋以下哪一种设备属于输出设备( )。
A.扫描仪B.键盘C.鼠标D.打印机⒌下列对操作系统功能的描述最为完整的是( )。
A.负责外设与主机之间的信息交换B.负责诊断机器的故障C.控制和管理计算机系统的各种硬件和软件资源的使用D.将没有程序编译成目标程序⒍CPU、存储器、I/O设备是通过( )连接起来的。
A.接口B.总线C.控制线D.系统文件⒎断电后会丢失数据的存储器是( )。
A.RAMB.ROMC.硬盘D.光盘⒏以下哪一种是属于电子邮件收发的协议( )。
A.SMTPB.UDPC.P2PD.FTP⒐下列选项中不属于图像格式的是( )。
A.JPEG格式B.TXT格式C.GIF格式D.PNG格式⒑链表不具有的特点是( )。
A.不必事物估计存储空间B.可随机访问任一元素C.插入删除不需要移动元素D.所需空间与线性表长度成正比⒒下列各无符号十进制整数中,能用八位二进制表示的数中最大的是( )。
A.296B.133C.256D.199⒓下列几个32位IP地址中,书写错误的是( )。
A.162.105.135.27B.192.168.0.1C.256.256.129.1D.10.0.0.1⒔要求以下程序的功能是计算:s=1+1/2+1/3+...+1/10。
NOIP2014普及组复赛试题解答

NOIP2014普及组复赛试题解答NOIP2014普及组复赛试题解答1.珠心算测验#includeusing namespace std;int main(){freopen("count.in","r",stdin);freopen("count.out","w",stdout);int n;scanf("%d",&n);int a[n+1],j,k,out=0;bool pd=false;for(int i=1;i<=n;++i)scanf("%d",&a[i]);for(int i=1;i<=n;++i){j=1;do{k=1;do{if((i!=j)&&(j!=k)&&(k!=i)&&(a[i]==a[j]+a[k])) {out++;pd=true;}k++;}while(k<=n&&pd==false);j++;}while(j<=n&&pd==false);pd=false;}printf("%d",out);fclose(stdin);fclose(stdout);return 0;}2.比例简化考虑到输出结果必须是最贴近原比值且互质的一对正整数,如果采用除法再取整,则会导致结果偏差较大。
由于1≤L≤100,可以枚举其所有组合,再在枚举结果中取最贴近的那一对正整数。
可以用二维数组的下标来存储A',B'的值,二维数值元素存储A'/B'与A/B的差值。
①读取A、B、L的值;②考虑极端情况B/A>L,当出现此情况时,直接将赋值A'=1;B'=L,以减少计算时间;③枚举所有A'/B'的值,并存储在二维数组元素s[A'][B']中;④求二维数组的最小值;⑤输出A' B'。
[noip 2014]解方程
![[noip 2014]解方程](https://img.taocdn.com/s3/m/6e29a954ae1ffc4ffe4733687e21af45b307fe00.png)
[noip 2014]解方程[NOIP 2014]解方程在计算机科学与信息学竞赛中,NOIP(全国青少年信息学奥林匹克竞赛)是中国最高水平的信息学竞赛之一。
2014年的NOIP中,出现了一道名为“解方程”的题目,考察了参赛选手的数学思维和编程能力。
这道题目要求解一个复杂的方程,具体描述如下:给定一个正整数x(1 ≤ x ≤ 1000000),求满足以下条件的正整数y的最小值:1. y是x的因子之一;2. y的每一位数字都是x的因子之一。
要解决这道题目,首先需要理解题目的意思。
题目中要求找到一个满足条件的正整数y,这个y必须是x的因子之一,并且y的每一位数字都是x的因子之一。
解决这道题目的关键在于如何确定y的取值范围。
根据题目的要求,y必须是x的因子之一,也就是说y可以整除x。
因此,我们可以先遍历x的所有因子,然后再判断每个因子是否满足y的每一位数字都是x的因子之一的条件。
为了找到x的所有因子,我们可以从1到x的开方进行遍历。
对于每个数i,如果x能够整除i,那么i就是x的一个因子。
通过这样的遍历,我们可以找到x的所有因子,并保存在一个列表中。
接下来,我们需要判断每个因子是否满足y的每一位数字都是x的因子之一的条件。
为了实现这个功能,我们可以将每个因子转换为字符串,并遍历字符串的每一位数字。
对于每一位数字,我们需要判断它是否是x的因子之一。
如果所有位数字都是x的因子之一,那么这个因子就满足条件。
通过以上的思路,我们可以编写一个程序来解决这道题目。
首先,我们需要定义一个函数来判断一个数是否是另一个数的因子。
接着,我们可以使用一个循环来遍历x的所有因子,并在循环中使用另一个循环来判断每个因子是否满足条件。
最后,我们可以输出满足条件的最小值。
下面是一个Python语言的示例代码:```pythonimport mathdef is_factor(x, y):if x % y == 0:return Trueelse:return Falsedef solve_equation(x):factors = []for i in range(1, int(math.sqrt(x))+1):if is_factor(x, i):factors.append(i)factors.append(x // i)factors.sort()for factor in factors:if all(str(digit) in str(x) for digit in str(factor)):return factorx = int(input("请输入正整数x的值:"))y = solve_equation(x)print("满足条件的最小值y为:", y)```通过运行以上代码,我们可以输入一个正整数x的值,并得到满足条件的最小值y。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1.珠心算测验注意看清题意:其中有多少个数,恰好等于集合中另外两个(不同的)数之和。
这样的题意加上100的规模,建议暴力3个for:#include<cstdio>#include<cstring>#include<algorithm>#include<iostream>using namespace std;int n;int a[105];int main(){freopen("count.in","r",stdin);freopen("count.out","w",stdout);scanf("%d",&n);for(int i=1; i<=n; i++){scanf("%d",&a[i]);}sort(a+1,a+n+1);int res=0;for(int i=1; i<=n; i++){int ok=0;for(int j=1; j<=n && !ok; j++) if(j!=i){for(int k=1; k<=n && !ok; k++) if(a[k]!=a[j]){if(a[j]+a[k]==a[i]) ok=1;}}res+=ok;}printf("%d\n",res);return 0;}2.比例简化L很小,还是枚举,然后比较的话建议用乘法比较,避免精度问题:#include<cstdio>#include<cstring>#include<iostream>using namespace std;int A,B,L;int gcd(int a,int b){if(b==0) return a;return gcd(b,a%b);}int main(){freopen("ratio.in","r",stdin);freopen("ratio.out","w",stdout);scanf("%d%d%d",&A,&B,&L);int ba=1000000,bb=1;for(int i=1; i<=L; i++){for(int j=1; j<=L; j++){if(gcd(i,j)==1 && i*B>=j*A){if(ba*j>=bb*i){ba=i, bb=j;}}}}printf("%d %d\n",ba,bb);return 0;}3.螺旋矩阵没一圈的数量有规律的,最外面一圈(n-1)*4,然后每往里n-2,直到后要么只有一个点,要么4个点。
所以可以先确定是在哪圈里,然后暴力走一圈就行:#include<cstdio>#include<cstring>#include<iostream>using namespace std;int n,x,y;int solve(){scanf("%d%d%d",&n,&x,&y);int ceng=min(x, n+1-x);ceng=min(ceng, min(y, n+1-y));int num=0, len=n-1;for(int i=1; i<ceng; i++,len-=2){int ad;if(len==0) ad=1;else ad=len*4;num+=ad;}num++;int nx=ceng, ny=ceng;if(nx==x && ny==y) return num;for(int i=1; i<=len; i++) {ny++; num++;if(nx==x && ny==y) return num;}for(int i=1; i<=len; i++){nx++; num++;if(nx==x && ny==y) return num;}for(int i=1; i<=len; i++){ny--; num++;if(nx==x && ny==y) return num;}for(int i=1; i<len; i++){nx--; num++;if(nx==x && ny==y) return num;}return -1;}int main(){freopen("matrix.in","r",stdin);freopen("matrix.out","w",stdout);int res=solve();printf("%d\n",res);return 0;}4.子矩阵可以用二进制状态枚举取了哪些列,然后对于行的选取,可以DP,预处理每一行的代价,任意两行之间的代价,那么dp[j][i]=min(dp[j][i], dp[k][i-1]+val[k][j]+dp[j][1]);代码写的不是很顺,为了调试写了很多输出注释语句:#include<cstdio>#include<cstring>#include<cstdlib>#include<iostream>using namespace std;int g[25][25],f[25][25],dp[25][25],val[25][25];int n,m,x,y,res;int count(int v){int ret=0;while(v){if(v&1) ret++;v>>=1;}return ret;}void gao(){//printf("gao\n");for(int i=1; i<=n; i++){for(int j=i+1; j<=n; j++){val[i][j]=0;for(int k=1; k<=y; k++) val[i][j]+=abs(f[i][k]-f[j][k]);//printf("%d %d = %d\n",i,j,val[i][j]);}}for(int i=1; i<=x; i++){for(int j=i; j<=n; j++) dp[j][i]=100000000;}for(int i=1; i<=n; i++){dp[i][1]=0;for(int j=2; j<=y; j++){dp[i][1]+=abs(f[i][j]-f[i][j-1]);}}//printf("ok\n");for(int i=2; i<=x; i++){for(int j=i; j<=n; j++){//dp[j][i]=100000000;for(int k=i-1; k<j; k++){dp[j][i]=min(dp[j][i],dp[k][i-1]+val[k][j]+dp[j][1]);//printf("%d %d = %d %d\n",j,i,dp[j][i],dp[k][i-1]);}}}for(int i=x; i<=n; i++) res=min(res, dp[i][x]);// printf("res=%d\n",res);}void solve(){scanf("%d%d%d%d",&n,&m,&x,&y);for(int i=1; i<=n; i++){for(int j=1; j<=m; j++) {scanf("%d",&g[i][j]);}}res=100000000;for(int i=0; i<(1<<m); i++){if(count(i)!=y) continue;//printf("mask = %d\n",i);int r=0;for(int j=0; j<m; j++){if( ((i>>j)&1) ==0) continue;++r;for(int k=1; k<=n; k++) f[k][r]=g[k][j+1];}/*for(int j=1; j<=n; j++){for(int k=1; k<=y; k++) printf("%d ",f[j][k]);printf("\n");}printf("\n");*/gao();}printf("%d\n",res);}int main(){freopen("submatrix.in","r",stdin);freopen("submatrix.out","w",stdout);solve();return 0;}。