noip普及组复赛答案

合集下载

noip普及组复赛模拟试题10答案

noip普及组复赛模拟试题10答案

【试题描述】选拔考试即将开始,同学们陆续进入考场,哇,考场好大啊。

究竟star应该坐在哪张位置呢?考场门口贴了一张考场座位(m*n)明细表,其中考场里的有些位置是坏的不能坐,考号为1的同学的座位号是第一排第一列,即他的座位是1、1,2号同学的座位是1、2,以此类推,当然,如果某个座位是坏的,那么这个同学就往后延一个座位,后面的同学再依次排下去。

考场座位肯定够所有考生坐。

【输入描述】第1行:3个整数,m,n,k(m,n表示考场的座位是m行n列,k表示star的考号)m,n<=100;第2..m+1行:每行n个数代表考场明细0代表座位是好的,1代表座位是坏的)【输出描述】一行:两个整数代表star应该坐的位置【输入样例】4 4 50 0 0 00 0 1 00 0 0 10 0 0 0【输出样例】2 1【试题来源】常州长训班测试program ex1661;var k,i,j,s,m,n:integer;a:array[1..100,1..100] of 0..1;beginreadln(m,n,k);for i:=1 to m dofor j:=1 to n doread(a[i,j]);s:=0;for i:=1 to m dofor j:=1 to n dobeginif a[i,j]<>1 then inc(s);if s=k then begin writeln(i,' ',j); exit;end;end;end.输入 6 6 70 0 0 0 1 00 0 1 0 0 00 0 0 1 1 00 0 0 0 0 11 0 0 0 0 00 0 1 0 0 1 输出 2 2输入8 6 100 0 0 0 1 00 0 1 0 0 00 0 0 1 1 00 0 0 0 0 11 0 0 0 0 00 0 1 0 0 10 1 0 0 0 01 0 0 0 0 1输出 2 6【题目描述】一个农夫有n(n≤1000)头奶牛,可由于产奶太少,他决定把当天产奶最少的牛杀掉,但他有点舍不得,如果当天不只一头奶牛产奶,至少他便放过它们。

noip普及组复赛模拟试题12答案

noip普及组复赛模拟试题12答案

【试题描述】读入二行整数,然后程序要完成如下的操作:第一步将2行数合并在一起,第二步将合并好的数由大到小排序,第三步重新排列,从第一个数起开始编号,然后将奇数号上的数(样例中的13,9,5)从前向后排,偶数号上的数(样例中的12,7,4)从后往前排。

第四步计算,将排好的数,第一个+第二个数的2倍+第三个数的3倍+…第五步:输出计算的结果。

【输入描述】第一行是一个整数 n(1≤n≤10),第二行有n个整数,整数范围在1~100之间,数与数之间空格隔开。

第三行是一个整数 m(1≤m≤10),第四行有m个整数,整数范围在1~100之间,数与数之间空格隔开。

【输出描述】一个整数(最后计算的结果)。

【输入样例】412 4 5 9213 7【输出样例】 169【解题提示】样例说明:第一步合并后为:12 4 5 9 13 7第二步上例中的数成为:13 12 9 7 5 4第三步得到:13 9 5 4 7 12第四步计算后为:13+2×9+3×5+4×4+5×7+6×12=169最后输出 169【试题来源】 2008年江苏省小学生信息学(计算机)奥赛program ex1731;var m,n,i,j,s,t,b1,b2:integer;a,b,c:array[1..20] of integer;sum:longint;beginreadln(n);for i:=1 to n do read(a[i]);readln(m);for i:=1 to m do read(a[i+n]);s:=m+n;for i:=1 to s-1 dofor j:=i+1 to s doif a[i]<a[j] then begint:=a[i];a[i]:=a[j];a[j]:=t;end;b1:=0;b2:=0;for i:=1 to s doif i mod 2=1 then begin inc(b1); b[b1]:=a[i];endelse begin inc(b2); c[b2]:=a[i];end;for i:=1 to b1 do a[i]:=b[i];for i:=1 to b2 do a[b1+i]:=c[b2-i+1];sum:=0;for i:=1 to s dosum:=sum+i*a[i];writeln(sum);end.输入 615 34 25 9 22 39423 17 46 57输出1496输入1015 34 25 9 22 39 47 12 33 99823 17 46 57 51 8 38 64输出5687SHLQSH数问题描述:我们把t1 , t2 (包括t1 , t2 (1<=t1<t2<=10000000))之间的所有数的约数个数和n称为t1 , t2的shlqsh数;问题是给出数据t1 , t2后,求t1 , t2的shlqsh数;输入输入文件shlqsh.in 仅包含一行,共有两个整数,表示t1 t2 (用空格分开)输出输出文件shlqsh.out 仅有一个整数,表示t1 , t2之间的shlqsh数。

noip普及组复赛模拟试题8(答案)

noip普及组复赛模拟试题8(答案)

Description 给定整数n(32位以内),判断它是否为2的方幂。

是就输出'yes',否则输出'no'。

Input 一个整数n。

Output 一个字符串Sample Input 4Sample Output yesHintn > 0 && ( ( n & ( n - 1 ) ) == 0貌似是数学问题,套用了提示program ex1560;var n:longint;beginreadln(n);if (n>0) and (n and (n-1)=0) then write('yes') else write('no'); end.输入 127 输出 NO 输入 262144 输出 YES 输入 68719476736 输出 YES问题描述:计算机软件版本通常被用来区分某种软件在不同时间的发布。

大部分软件版本号都是用“.”分隔的非负数的序列。

对两个不同的版本A = a1.a2.a3…an和B = b1.b2.b3…bm,如果下面两个条件之一成立,我们认为版本A要比版本B新:1.对某个i,我们有:对所有j < i, ai > bi 和aj = bj;2.n比m大,而且对所有i < m, ai = bi。

(ai和bi都不超过LONGINT)在这个问题里,你要对给定的一组版本号,按照上面的定义从旧到新排序。

输入文件(VERSIONS.IN):输入文件第一行是一个整数N(N<=20),表示要排序的版本数。

接下来的N行每行一个版本号。

每个版本号是长度不超过50的字符串。

输出文件(VERSIONS.OUT):将排好序的结果以每行一个版本号输出。

输入输出样例:VERSIONS.IN43.0.512.42.4.6VERSIONS.OUT12.42.4.63.0.5var n,i:integer;scan:array [1..30] of string;function check(aa,bb:string):boolean;vara,b:longint;i,j:integer;code:integer;beginaa:=aa+'.'; bb:=bb+'.';i:=pos('.',aa); j:=pos('.',bb);while (i>0) and (j>0) do beginval(copy(aa,1,i-1),a,code);val(copy(bb,1,j-1),b,code);if a<b then exit(true);if a>b then exit(false);delete(aa,1,i);delete(bb,1,j);i:=pos('.',aa);j:=pos('.',bb);end;if (i=0) and (j>0) then exit(true) else exit(false); end;procedure qsort(l,r:integer);vari,j:integer;t:string;beginif l>=r then exit;i:=random(r-l)+l;t:=scan[i];scan[i]:=scan[l];i:=l;j:=r;repeatwhile (i<j) and (check(t,scan[j])) do dec(j);if i=j then break; scan[i]:=scan[j];while (i<j) and (check(scan[i],t)) do inc(i);if i=j then break; scan[j]:=scan[i];until i=j;scan[i]:=t;qsort(l,i-1);qsort(i+1,r);end;beginreadln(n);for i:=1 to n do readln(scan[i]); qsort(1,n);for i:=1 to n do writeln(scan[i]); end.输入73.0.5.11.02.22.2.62.2.83.0.5.43.0 输出1.02.22.2.62.2.83.03.0.5.13.0.5.4输入1211.0.21.0.36.23.43.4.222.12.1.43.4.14.24.2.2输出 11.0.21.0.322.12.1.43.43.4.13.4.24.24.2.26.2输入正整数N、M,求N÷M的值。

noip普及组复赛模拟试题22(答案)

noip普及组复赛模拟试题22(答案)

军方截获的信息由n(n<=30000)个数字组成,因为是敌国的高端秘密,所以一时不能破获。

最原始的想法就是对这n个数进行小到大排序,每个数都对应一个序号,然后对第i个是什么数感兴趣,现在要求编程完成。

【输入格式】第一行n,接着是n个截获的数字,接着一行是数字k,接着是k行要输出数的序号。

【输出格式】k行序号对应的数字。

【输入样例】Secret.in5121 1 126 123 73243【输出样例】Secret.out7123121program secret;const max=30000;var n,i,x,k:longint;a:array[1..max] of longint;procedure sort(l,r:longint);var i,j,t,mid:longint;begini:=l;j:=r;mid:=a[(l+r)div 2];repeatwhile a[i]<mid do inc(i);while a[j]>mid do dec(j);if j>=i thenbegint:=a[i];a[i]:=a[j];a[j]:=t;inc(i);dec(j)end;until i>j;if l<j then sort(l,j);if i<r then sort(i,r);end;assign(input,'secret.in');assign(output,'secret.out');reset(input);rewrite(output);readln(n);for i:=1 to n do read(a[i]);sort(1,n);readln(k);for i:=1 to k dobeginreadln(x);writeln(a[x]);end;close(input);close(output);end.输入1512 10 36 127 126 123 75 89 101 999 777 654 456 890 134624391014 输出127536127134890输入248 18 12 24 434 10 36 127 126 123 75 89 101 999 777 654 456 890 134 555 221 108 888 65685431920141710 输出2412654656134456108有一只坏的里程表:它总是跳过数字3和数字8。

noip普及组复赛入门训练11(答案)

noip普及组复赛入门训练11(答案)

PASCAL复习111.文本图形(文件名WBTX.PAS)【问题描述】已知两个数的最大公约数是x,最小公倍数是y.共有多少对数满足?输入x,y,输出每一对数和满足的总对数.输入:6 36输出:6 3612182(共2组)输入:12 64输出:0(没有符合条件的数)Var x,y,a,b,c,t,i1,i2:longint;Beginreadln(x,y); t:=0;for i1:=x to y-1 dofor i2:=i1+1 to y do begina:=i1; b:=i2;repeatc:=a mod b;a:=b;b:=c;until b=0;b:=i1*i2 div a;if (a=x) and (b=y)then begin t:=t+1; writeln(i1:8,i2:8); end;end;writeln(t);readln;End.2. NICOMACHUS定理(文件名NCMC.PAS)【问题描述】NICOMACHUS定理:任何一个整数的立方都可以表示成一串奇数的和,例如:13=1=1,23=3+5=8,33=7+9+11=27,43=13+15+17+19=64,输入任一整数n,输出这一整数的立方与一串奇数的和。

输入输出样例:输入:n=4输出:64=13+15+17+19Var n,m,i,j,s,k,t:longint;Beginwrite(‘n=‘);readln(n);m:=n*n*n;i:=-1;repeati:=i+2;j:=i; s:=0; t:=0;repeats:=s+j; t:=t+1;j:=j+2;until t=n;until (s=m);write(m,’=‘,i);for k:=i+2 to j-2 doif k mod 2=1 then write(‘+’,k);writeln;readln;End.或i:=n*(n-1)+1;Write(n*n*n,’=‘,i);For j:=2 to n do begini:=i+2;write(‘+’,i);end;3.费马命题(文件名FMMT.PAS)费马命题是:一个素数,若被4除余1,则它能表示成两个数的平方和。

noip普及组复赛试题及答案

noip普及组复赛试题及答案

noip普及组复赛试题及答案一、选择题1. 在计算机科学中,以下哪个概念与数据结构最相关?A. 算法B. 操作系统C. 网络协议D. 编译原理答案:A2. 以下哪种排序算法的时间复杂度为O(n^2)?A. 快速排序B. 归并排序C. 堆排序D. 冒泡排序答案:D3. 在C++中,以下哪个关键字用于定义类?A. structB. unionC. enumD. typedef答案:A4. 以下哪个选项不是数据库管理系统(DBMS)的特性?A. 数据持久性B. 数据共享C. 数据加密D. 数据独立性答案:C5. 在计算机网络中,TCP和UDP协议分别属于哪一层?A. 传输层B. 应用层C. 网络层D. 物理层答案:A二、填空题1. 在计算机程序中,______ 用于定义数据的存储方式和组织形式。

答案:数据结构2. 一个算法的时间复杂度为O(1),表示该算法的执行时间与输入数据的规模______。

答案:无关3. 在C++中,______ 是一种特殊的类,它提供了一种方式来定义数据类型。

答案:typedef4. 数据库管理系统(DBMS)通常包含数据定义语言(DDL)、数据操纵语言(DML)和______。

答案:数据控制语言(DCL)5. 在计算机网络中,______ 协议负责在网络层进行数据包的路由选择。

答案:IP三、简答题1. 请简述面向对象编程(OOP)的三个基本特征。

答案:封装、继承、多态2. 描述二分查找算法的基本步骤。

答案:二分查找算法的基本步骤包括:首先确定数组是有序的,然后取中间元素与目标值比较,如果中间元素等于目标值,则查找成功;如果目标值小于中间元素,则在左半部分继续查找;如果目标值大于中间元素,则在右半部分继续查找,直到找到目标值或查找范围为空。

四、编程题1. 编写一个函数,实现对整数数组的排序。

答案:以下是一个简单的冒泡排序算法实现:```cppvoid bubbleSort(int arr[], int n) {for (int i = 0; i < n-1; i++) {for (int j = 0; j < n-i-1; j++) {if (arr[j] > arr[j+1]) {swap(arr[j], arr[j+1]);}}}}```2. 编写一个函数,实现计算一个整数的阶乘。

noip普及组复赛入门测试(答案+测试数据)

noip普及组复赛入门测试(答案+测试数据)

一、新龟兔赛跑(文件名xgtsp.pas)新龟兔赛跑比赛即将举行,此次龟兔赛跑比赛的规则与以往有所不同,不再考察兔子和乌龟谁在最短的时间内跑完规定的路程,而是考察谁在规定时间内跑的路程更长,且兔子和乌龟跑步都是匀速的。

由于兔子的坏习惯,它总喜欢把比赛的总时间T小时中的K小时拿来睡觉。

现在给你比赛的总时间T、兔子的睡觉时间K、兔子的速度U、乌龟的速度V,需要你求出该次比赛谁最后获胜。

输入第一行为一个整数X,表示有X组输入数据。

每组数据只有一行,包括4个数T、K、U、V (1 ≤ T≤ 300,0 ≤ K ≤ T,1 ≤ U ≤ 100,1 ≤ V ≤ 100)。

对于每组数据,输出只有一个数,如果兔子获胜则输出-1,如果乌龟获胜则输出1,如果同时到达则输出0。

允许输入一组数后立即输出对应的结果。

样例输入:21 12 16 2 6 3样例输出:1-1varv,u,t,k,n,i:integer;beginreadln(n);for i:=1 to n do beginreadln(t,k,u,v);if v*t>U*(t-k) then writeln(1);if v*t<U*(t-k) then writeln(-1);if v*t=U*(t-k) then writeln(0);end;end.1、输入:26 2 6 28 6 8 2输出:-12、输入:2300 280 60 20120 0 12 13输出:113、输入:3100 20 50 30100 50 45 25100 80 27 17输出:-1114、输入:3150 77 29 23127 11 22 13139 22 13 7输出:1-1-1二、小球路程(文件名:XQLC.PAS )已知小球从100米高度自由下落,落地后反弹起,又落地,又弹起,……。

每次弹起的高度都是上一次高度的一半。

求小球第N次反弹起的高度和球在整个过程所经过的路程(包括下落和反弹),用键盘输入N,输出反弹高度和经过路程,结果保留两位小数。

noip普及组复赛模拟试题9答案

noip普及组复赛模拟试题9答案

给定两个正整数(二进制形式表示)A和B,问把A变为B需要改变多少位(bit)?也就是说,整数A和B的二进制表示中有多少位是不同的?Input 一行,两个非负整数A和B(32位以内)。

Output 一行,一个整数。

Sample Input 1 0Sample Output 1program ex1558;var a,b,d:longint;t,s,i:integer;beginreadln(a,b);d:=a xor b;s:=0;for i:=1 to 32 dobegint:= d and 1 ;d:=d shr 1;s:=s+t;end;writeln(s);end. 输入 15 4 输出 3输入 3248 125 输出 7 输入 567894321 12134 输出16【试题描述】做操的时间到了,小明和另外几个同学没有吸取上一次的教训,在教室思考讨论老师讲的一道题目(学习用功型),当他们想通这个题时,其他同学已经在操场上排好队了,他们快速来到操场,希望尽快找到以前排队的位置,准备做操,小明他们记得应该排在某学号同学的后面。

你能不能来帮帮小明他们呢?【输入描述】输入(三行):n m(现在队伍的长度待插入的同学人数)n个同学的学号(5位整数)m组数据(每组2个,分别为插入位置的学生学号插入的学生学号)【输出描述】n+m个学号(插入后每个学生的学号)【输入样例】4 234812 34123 23133 4583134123 23483 45831 83123【输出样例】34812 34123 23483 23133 45831 83123program ex1144;var i,j,n,m:integer;a:array[1..300] of longint;b,c:longint;procedure make(x,y:longint);var i,t:integer;beginfor i:=1 to n doif x=a[i] then begin t:=i+1;break; end;for i:=n downto t do a[i+1]:=a[i];a[t]:=y;n:=n+1;end;beginreadln(n,m);for i:=1 to n do read(a[i]);for i:=1 to m dobeginread(b,c);make(b,c) ;end;for i:=1 to n-1 do write(a[i],' ');write(a[n]);end.输入 8 334812 34123 23133 45831 34517 45830 23134 3412034123 23483 45831 83123 34517 43234输出 34812 34123 23483 23133 45831 83123 34517 43234 45830 23134 34120输入 10 434812 34123 23133 45831 34517 45830 23134 34120 23122 3410934123 23483 45831 83123 34517 43234 23122 23167输出 34812 34123 23483 23133 45831 83123 34517 43234 45830 23134 34120 23122 23167 34109问题描述:如果一个数包含了0--9这十个数字,就称为十全数,因此1023456789是最小的十全数。

noip普及组复赛入门训练1答案

noip普及组复赛入门训练1答案

noip普及组复赛入门训练1答案PASCAL复习21. 字符统计(文件名ZFTJ.PAS)读入一组字符,以“?”作为结束标志,统计其中元音字母、辅音字母、数字和其它符号个数(“?”作为结束标志,不计算个数)。

如输入字符为SouA56#s?,则输出YY=3,FY=2,SZ=2,QT=1。

输入输出样例:输入:SouA56#sEenTk3&?输出:YY=5,FY=5,SZ=3,QT=2var s1,S2,S3,S4,t:longint;c:char;begin S1:=0;S2:=0;S3:=0;S4:=0;while c<>'?' dobegin read(c);if ((c>='a') and (c<='z')) or ((c>='A') AND (C<='Z')) THENif (c='a') or (c='e') or (c='i') OR (c='o') or (c='u') or(c='A') OR (c='E') OR (c='I') OR (c='O') OR (c='U')THEN S1:=S1+1 ELSE S2:=S2+1ELSEIF (c>='0') and (c<='9') then s3:=s3+1ELSE S4:=S4+1;end;writeln('YY=',S1,'FY=',S2,'SZ=',S3,'QT=',S4-1);END.2.取数(QS.PAS)问题描述:我们来玩一个游戏:自然数1到N,按顺序列成一排,你可以从中取走任意个数,但是相邻的两个不可以同时被取走。

noip2021普及组复赛题解

noip2021普及组复赛题解

1. 珠心算考试注意看清题意:其中有多少个数,恰好等于集合中另外两个(不同的)数之和。

如此的题意加上100的规模,建议暴力3个for:#include<cstdio>#include<cstring>#include<algorithm>#include<iostream>usingnamespacestd;intn;inta[105];intmain(){freopen("","r",stdin);freopen("","w",stdout);scanf("%d",&n);for(inti=1;i<=n;i++){scanf("%d",&a[i]);}sort(a+1,a+n+1);intres=0;for(inti=1;i<=n;i++){intok=0;for(intj=1;j<=n&&!ok;j++)if(j!=i){for(intk=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);return0;}2. 比例简化L很小,仍是列举,然后比较的话建议用乘法比较,幸免精度问题: #include<cstdio>#include<cstring>#include<iostream>usingnamespacestd;intA,B,L;intgcd(inta,intb){if(b==0)returna;returngcd(b,a%b);}intmain(){freopen("","r",stdin);freopen("","w",stdout);scanf("%d%d%d",&A,&B,&L);intba=1000000,bb=1;for(inti=1;i<=L;i++){for(intj=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);return0;}3. 螺旋矩阵没一圈的数量有规律的,最外面一圈(n-1)*4,然后每往里n-2,直到后要么只有一个点,要么4个点。

noip普及组复赛模拟试题14(附答案)

noip普及组复赛模拟试题14(附答案)

解的个数(count)给定一个正整数K,问有多少和正整数X,Y满足X>=Y且1/K=1/X+1/Y,将所有解按X降序输出。

输入第一行一个数T,表示数据组数以下T行,每行一个数K输出T部分,每部分第一行一个数K,以下一次按X降序输出所有解,个数见样例,注意=+两边都有空格。

样例输入2212样例输出21/2 = 1/6 + 1/31/2 = 1/4 + 1/481/12 = 1/156 + 1/131/12 = 1/84 + 1/141/12 = 1/60 + 1/151/12 = 1/48 + 1/161/12 = 1/36 + 1/181/12 = 1/30 + 1/201/12 = 1/28 + 1/211/12 = 1/24 + 1/24数据规模30% K<=20100% K<=10000,T<=10标程:var t,i,j,l,n,k:integer;a:array[1..20] of integer;b,c:array[1..10000] of longint;procedure shou(n:integer);var k,s:longint;begink:=n+1;s:=n*2;l:=0;for i:=k to s dobeginif n*i mod (i-n)=0 thenbegininc(l);b[l]:=(n*i) div (i-n);c[l]:=i;end;end;end;beginassign(input,'count.in');reset(input);assign(output,'count.out'); rewrite(output);readln(t);for i:=1 to t doreadln(a[i]);for k:=1 to t dobeginshou(a[k]);writeln(l);for j:=1 to l dowriteln(1,'/',a[k],' ','=',' ',1,'/',b[j],' ','+',' ',1,'/',c[j]);end;close(input);close(output);end.输入341532输出31/4 = 1/20 + 1/51/4 = 1/12 + 1/61/4 = 1/8 + 1/851/15 = 1/240 + 1/161/15 = 1/90 + 1/181/15 = 1/60 + 1/201/15 = 1/40 + 1/241/15 = 1/30 + 1/3061/32 = 1/1056 + 1/331/32 = 1/544 + 1/341/32 = 1/288 + 1/361/32 = 1/160 + 1/401/32 = 1/96 + 1/481/32 = 1/64 + 1/64不等数列(num.cpp/c/pas)【题目描述】将1到n任意排列,然后在排列的每两个数之间根据他们的大小关系插入“>”和“<”。

noip普及组复赛模拟试题24(答案)

noip普及组复赛模拟试题24(答案)

1.质因数分解(prime.cpp/c/pas)【问题描述】已知正整数n 是两个不同的质数的乘积,试求出较大的那个质数。

【输入】输入文件名为prime.in。

输入只有一行,包含一个正整数n。

【输出】输出文件名为prime.out。

输出只有一行,包含一个正整数p,即较大的那个质数。

【输入输出样例】prime.in prime.out21 7【数据范围】对于60%的数据,6 ≤ n ≤ 1000。

对于100%的数据,6 ≤ n ≤ 2*109。

var i,j,n:longint;f:boolean;function sushu(i:longint):boolean;beginf:=true;for j:=2 to trunc(i/2) doif i mod j=0 then begin f:=false; sushu:=false; exit; end;if f then sushu:=true;end;beginassign(input,'prime.in');assign(output,'prime.out');reset(input);rewrite(output);readln(n);for i:=trunc(n/2) downto 2 doif (n mod i=0) and (sushu(i)) then beginwriteln(i);break;end;close(input);close(output);end.输入998 输出499 输入1999520027 输出99991设有一个数组A:array [0..N-1] of integer;存放的元素为0~N-1(1<N<=10)之间的整数,且A[i]≠A[j](i≠j)。

例如当N=6时,有:A=(4,3,0,5,1,2)。

此时,数组A 的编码定义如下:A[0]编码为0;A[i]编码为:在A[0],A[1],…,A[i-1]中比A[i]的值小的个数(i=1,2,…,N-1)∴上面数组A的编码为:B=(0,0,0,3,1,2)要求编程解决以下问题:(1)给出数组A后,求出其编码;(2)给出数组A的编码后,求出A中的原数据程序样例:例一:输入:Stat=1 {表示要解决的第(1)问题}N=8 {输入8个数}A=1 0 3 2 5 6 7 4输出:B=0 0 2 2 4 5 6 4例二:输入:Stat=2 {表示要解决的第(2)问题}N=7B=0 1 0 0 4 5 6输出:A=2 3 1 0 4 5 6[解]第1个问题的解法:用穷举搜索法。

第十届全国青少年信息学奥林匹克联赛复赛试题+答案

第十届全国青少年信息学奥林匹克联赛复赛试题+答案

第十届全国青少年信息学奥林匹克联赛复赛试题+答案(普及组三小时完成)不高兴的津津(unhappy.pas/dpr/c/cpp)【问题描述】津津上初中了。

妈妈认为津津应该更加用功学习,所以津津除了上学之外,还要参加妈妈为她报名的各科复习班。

另外每周妈妈还会送她去学习朗诵、舞蹈和钢琴。

但是津津如果一天上课超过八个小时就会不高兴,而且上得越久就会越不高兴。

假设津津不会因为其它事不高兴,并且她的不高兴不会持续到第二天。

请你帮忙检查一下津津下周的日程安排,看看下周她会不会不高兴;如果会的话,哪天最不高兴。

【输入文件】输入文件unhappy.in包括七行数据,分别表示周一到周日的日程安排。

每行包括两个小于10的非负整数,用空格隔开,分别表示津津在学校上课的时间和妈妈安排她上课的时间。

【输出文件】输出文件unhappy.out包括一行,这一行只包含一个数字。

如果不会不高兴则输出0,如果会则输出最不高兴的是周几(用1, 2, 3, 4, 5, 6, 7分别表示周一,周二,周三,周四,周五,周六,周日)。

如果有两天或两天以上不高兴的程度相当,则输出时间最靠前的一天。

【样例输入】5 36 27 25 35 40 40 6【样例输出】3花生采摘(peanuts.pas/dpr/c/cpp)【问题描述】鲁宾逊先生有一只宠物猴,名叫多多。

这天,他们两个正沿着乡间小路散步,突然发现路边的告示牌上贴着一张小小的纸条:“欢迎免费品尝我种的花生!——熊字”。

鲁宾逊先生和多多都很开心,因为花生正是他们的最爱。

在告示牌背后,路边真的有一块花生田,花生植株整齐地排列成矩形网格(如图1)。

有经验的多多一眼就能看出,每棵花生植株下的花生有多少。

为了训练多多的算术,鲁宾逊先生说:“你先找出花生最多的植株,去采摘它的花生;然后再找出剩下的植株里花生最多的,去采摘它的花生;依此类推,不过你一定要在我限定的时间内回到路边。

”我们假定多多在每个单位时间内,可以做下列四件事情中的一件:1)从路边跳到最靠近路边(即第一行)的某棵花生植株;2)从一棵植株跳到前后左右与之相邻的另一棵植株;3)采摘一棵植株下的花生;4)从最靠近路边(即第一行)的某棵花生植株跳回路边。

noip普及组复赛模拟试题26(答案)

noip普及组复赛模拟试题26(答案)

noip普及组复赛模拟试题26(答案)1.数字反转(revere.cpp/c/pa)【问题描述】给定一个整数,请将该数各个位上数字反转得到一个新数。

新数也应满足整数的常见形式,即除非给定的原数为零,否则反转后得到的新数的最高位数字不应为零(参见样例2)。

【输入】输入文件名为revere.in。

输入共1行,一个整数N。

【输出】输出文件名为revere.out。

输出共1行,一个整数,表示反转后的新数。

【输入输出样例1】revere.inrevere.out123321【输入输出样例2】Revere.inrevere.out-380-83【数据范围】-1,000,000,000≤N≤1,000,000,000。

var3,1,2:tring;n,i:integer;beginaign(input,'revere.in');reet(input);aign(output,'revere.out');rewrite(output);read(1);n:=length(1);if1[1]='-'thenbegin2:='-';fori:=1ton-1do1[i]:=1[i+1];delete(1,n,1);end;n:=length(1);fori:=1tondo3:=3+1[n-i+1];i:=1;while(3[i]='0')and(length(3)>1)dodelete(3,1,1);write(2+3);cloe(input);cloe(output);end.2.统计单词数(tat.cpp/c/pa)【问题描述】一般的文本编辑器都有查找单词的功能,该功能可以快速定位特定单词在文章中的位置,有的还能统计出特定单词在文章中出现的次数。

现在,请你编程实现这一功能,具体要求是:给定一个单词,请你输出它在给定的文章中出现的次数和第一次出现的位置。

noip普及组复赛入门训练4(答案)

noip普及组复赛入门训练4(答案)

PASCAL复习51. 奖学金(文件名 JXJ.PAS)小明得到一笔优秀学生奖学金N元(N为整数,1≤N≤500),到商店去买笔,笔的单价有6角、7角、8角和9角四种,如果小明准备将钱全部用于买笔,不流余钱,请编程帮助小明算出这N元最多可以买几支笔?最少可以买几支笔?如果不可能,则用0表示。

输入输出样例:输入:N=10输出:Zuiduo=16Zuishao=12varn,m : longint;beginwrite('N = ');readln(n);if n = 1then writeln(0)else beginwriteln('Zuiduo = ',n*10 div 6);if n*10 mod 9 > 0 then m := 1 else m:= 0;writeln('Zuishao = ',n*10 div 9 + m);end;end.2.摘水果(文件名ZSG.PAS)小明家的院子里有一棵苹果树,每到秋天树上就会结出12个苹果。

苹果成熟的时候,小明就会跑去摘苹果。

小明有个40厘米高的板凳,当他不能直接用手摘到苹果的时候,就会踩到板凳上再试试。

现在已知12个苹果到地面的高度,以及小明把手伸直的时候能够达到的最大高度,请帮小明算一下他能够摘到的苹果的数目。

假设他碰到苹果,苹果就会掉下来。

【输入】输入两行数据。

第一行包含10个100到200之间(包括100和200)的整数(以厘米为单位)分别表示10个苹果到地面的高度,两个相邻的整数之间用一个空格隔开。

第二行只包括一个100到120之间(包含100和120)的整数(以厘米为单位),表示小明把手伸直的时候能够达到的最大高度。

【输出】输出一行,这一行只包含一个整数,表示小明能够摘到的苹果的数目。

【样例输入】100 200 150 140 129 134 167 198 200 111 135 178110【样例输出】7varn1,n2,n3,n4,n5,n6,n7,n8,n9,n10,n11,n12,a,x:integer; beginreadln(n1,n2,n3,n4,n5,n6,n7,n8,n9,n10,n11,n12); readln(a);x:=0;a:=a+40;if a>=n1 then x:=x+1;if a>=n2 then x:=x+1;if a>=n3 then x:=x+1;if a>=n4 then x:=x+1;if a>=n5 then x:=x+1;if a>=n6 then x:=x+1;if a>=n7 then x:=x+1;if a>=n8 then x:=x+1;if a>=n9 then x:=x+1;if a>=n10 then x:=x+1;if a>=n11 then x:=x+1;if a>=n12 then x:=x+1;writeln(x);readln;end.3. 乘积根(CJG.PAS)一个正整数的数字的乘积N的定义是:这个整数中非零数字的乘积.例如,整数999的数字乘积为9*9*9,即729。

noip普及组复赛模拟试题16(附答案)

noip普及组复赛模拟试题16(附答案)

noip普及组复赛模拟试题16(附答案)【问题描述】任何一个整数N都能表示成另外两个整数a和b的平方差吗?如果能,那么这个数N就叫做Couple number。

你的工作就是判断一个数N是不是Couple number。

【输入文件】仅一行,两个长整型范围内的整数n1和n2,之间用1个空格隔开。

【输入文件】输出在n1到n2范围内有多少个Couple number。

注意:包括n1和n2两个数,且n1<="" <="10" n1="" p=""> 【输入样例】1 10【输出样例】7Couple numbera*a-b*b=n <=> (a+b)(a-b)=n如果n是奇数,则a,b一奇一偶,而n=1*n,所以,令a=(n+1)/2,b=(n-1)/2,即n一定是Couple number。

如果n是偶数,则a,b同奇同偶,此时如果n mod 4=2,则n一定是拆成一奇一偶的和,即x+y和x-y的值一定是一奇一偶,这种情况下x,y肯定无整数解,所以此时的n一定不是Couple number;如果n mod 4=0,则a=n/4+1,b=n/4-1,即n一定是Couple number。

参考程序:var x,y,i,ans:longint;begin assign(input,'couple.in'); reset(input);readln(x,y); close(input);ans:=0;for i:=x to y dobeginif odd(i) then inc(ans)else if i mod 4=0 then inc(ans);end;assign(output,'couple.out');rewrite(output);writeln(ans);close(output);end.10 90(60)5000 12000(5251)100000 200000(75001)对于某个数n,,我们这次的工作仅是求出小于n且和n互质的数的个数,,比如n=10时 1,3,7,9均与10互质//互质的定义是gcd(a,b)=1输入格式 InputFormat输入只有一行,一个数N(1<=N<=2,000,000,000)。

noip普及组复赛模拟试题11答案

noip普及组复赛模拟试题11答案

机器人深海探测是一个极富挑战性的高技术科学研究项目。

小雪参加了这一项目的研究工作。

潜水机器人可以携带规定有限的能量。

在深海探测过程中,机器人需要消耗一定的能量,但可以在机器人之间通过接触传递能量。

用多个潜水机器人接力潜水可以极大地提高潜水机器人的潜水深度。

现给定2个潜水机器人。

第1个潜水机器人最多可以携带x1单位的能量,每下潜1米需要消耗能量y1单位。

第2个潜水机器人最多可以携带x2单位的能量,每下潜1米需要消耗能量y2单位。

开始时2个潜水机器人均处于同一海平面高度为0,并且每个机器人初始时都携带了规定最多的能量。

计算用这2个机器人进行不返回的接力深海探测可下潜的最大深度。

输入:每行一个整数,依次为x1,x2,y1,y2;输出: 这2个登山机器人可下潜的最大深度,精确到小数点后2位。

例如输入:50500.010.01输出:7500.00var x1,x2,y1,y2,x,y,s:real;beginreadln(x1); readln(x2); readln(y1); readln(y2);s:=0;if (x1/y1)>(x2/y2) thenbeginx:=x1;y:=y1;endelse beginx:=x2;y:=y2;end;repeatx1:=x1-y1;x2:=x2-y2;s:=s+1;until x1+x2<=x;s:=s+x/y;writeln(s:0:2);readln;end.输入:40 0.02↙50 0.01↙输出:6334.00输入25350.150.25输出254.671233211.55.1输出131.002035年,智能机器人在各行各业中的应用已经十分普遍了,毕竟它做事时的精度与力量比一个普通人是强多了。

王涛的运输队里就有一个,是用来装卸货物的。

这天,他们的任务是要把N(2 <= N <= 50 )根废旧的条形钢材运送到钢铁厂重新冶炼。

这些钢材长短不同(有些还特别的长),为了便于运输,只好把它们切割成小段。

noip普及组复赛模拟试题34(附答案)

noip普及组复赛模拟试题34(附答案)

1.近来见习魔法师们在进行一项有关二进制数的研究,研究涉及的一个统计问题令他们大伤脑筋。

问题是这样的:若将一个正整数化为二进制数,在此二进制数中,我们将数字1的个数多于数字0的个数的这类二进制数称为A类数,否则就称其为B类数。

例如:(13)10=(1101)2其中1的个数为3,0的个数为1,则称此数为A类数;(10)10=(1010)2其中1的个数为2,0的个数也为2,称此数为B类数;(24)10=(11000)2其中1的个数为2,0的个数为3,则称此数为B类数;程序要求:求出X~Y之中,全部A、B两类数的个数。

样例输入10 20 输出 5 6Var X,Y,i,j,la,lb:longint;procedure ze(m:longint);var l0,l1:longint;begin l0:=0;l1:=0;while m<>0 dobegin if m mod 2=0 then l0:=l0+1 else l1:=l1+1;m:=m div 2;end;if l1>l0 then j:=1 else j:=0;end;begin la:=0;lb:=0; readln(x,y);for i:=x to y dobegin ze(i); if j=1 then la:=la+1 else if j=0 then lb:=lb+1;end;writeln(la);writeln(lb);end.输入50 100 输出28 23 输入200 400 输出110 91输入1000 2000输出615 386 输入40000 50000 输出4818 5183老师给笑笑布置了一份作业,笑笑不知如何解决。

老师给了一串很长的数列,要求从中找出连续的一段来使的总和最大。

【输入文件】:第一行包含一个整数n,表示数列的长度。

(n<=100000)第二行包含n个整数来描述这个数列,每个整数的的绝对值不超过1000。

noip普及组复赛模拟试题27(答案)

noip普及组复赛模拟试题27(答案)

输入二个正整数x0,y0(2≤x0≤10000,2≤y0≤100000),求出满足下列条件的P、Q的个数。

条件: 1.P、Q是正整数2.要求P、Q以xO为最大公约数,以yO为最小公倍数。

试求,满足条件的所有可能的两个正整数的个数。

输入输出样例:输入:x0 = 3y0 = 60输出:4说明:(不用输出)此时的 P Q 分别为:3 6015 1212 1560 3所以,满足条件的所有可能的两个正整数的个数共4种。

vari,pq,x0,y0,num,c : longint;function gcd(a,b : longint) : longint;beginwhile b > 0 do beginc := a mod b; a := b; b := c;end;gcd := a;end;beginrepeatwrite('X0 = '); readln(x0);write('Y0 = '); readln(y0);until (x0 >= 2) and (x0 < 10000) and (y0 >= 2) and (y0 < 100000);pq := x0*y0; num := 0;for i := x0 to y0 doif (pq mod i = 0) and (gcd(pq div i,i) = x0) then num := num+1;writeln(num);end.输入2 2 输出1 输入12 986 输出0输入 6 96 输出2 输入10 10000 输出 4在黑板上从1开始写出一组连续的自然数,然后擦去其中的一个数k,其余的数的平均值为a+c/b(繁分式)。

试编写程序求出被擦去的数k。

例如:在黑板上写出1,2,......,69之后把数7擦去而得到的其余的68个数的平均值为35+7/17。

输入一行三个数,分别为a、b、c(a,b,c≤100),用空格分隔。

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

noip普及组复赛答案【篇一:noip普及组复赛入门测试(答案+测试数据)】class=txt>新龟兔赛跑比赛即将举行,此次龟兔赛跑比赛的规则与以往有所不同,不再考察兔子和乌龟谁在最短的时间内跑完规定的路程,而是考察谁在规定时间内跑的路程更长,且兔子和乌龟跑步都是匀速的。

由于兔子的坏习惯,它总喜欢把比赛的总时间t小时中的k小时拿来睡觉。

现在给你比赛的总时间t、兔子的睡觉时间k、兔子的速度u、乌龟的速度v,需要你求出该次比赛谁最后获胜。

输入第一行为一个整数x,表示有x组输入数据。

每组数据只有一行,包括4个数t、k、u、v (1 ≤ t≤ 300,0 ≤ k ≤ t,1 ≤ u ≤ 100,1 ≤ v ≤ 100)。

对于每组数据,输出只有一个数,如果兔子获胜则输出-1,如果乌龟获胜则输出1,如果同时到达则输出0。

允许输入一组数后立即输出对应的结果。

样例输入:21 12 16 2 6 3样例输出:1-1varv,u,t,k,n,i:integer;beginreadln(n);for i:=1 to n do beginreadln(t,k,u,v);if v*tu*(t-k) then writeln(1);if v*tu*(t-k) then writeln(-1);if v*t=u*(t-k) then writeln(0);end;end.1、输入:26 2 6 28 6 8 2输出:-12、输入:2300 280 60 20120 0 12 13输出:113、输入:3100 20 50 30100 50 45 25100 80 27 17输出:-1114、输入:3150 77 29 23127 11 22 13139 22 13 7输出:1-1-1二、小球路程(文件名:xqlc.pas )已知小球从100米高度自由下落,落地后反弹起,又落地,又弹起,??。

每次弹起的高度都是上一次高度的一半。

求小球第n次反弹起的高度和球在整个过程所经过的路程(包括下落和反弹),用键盘输入n,输出反弹高度和经过路程,结果保留两位小数。

输入输出示例:输入:2输出:25.00225.00var n,b:integer;s,h:real;begin readln(n);h:=100;for b:=1 to n do begins:=s+h;h:=h/2;s:=s+h;end;writeln(h:0:2);writeln(s:0:2);end.三、商品编码(文件名:spbm.pas)某种商品编码是一个由13位数字组成的可识别的编码。

通过对这些编码数字使用一种计算方法可以检验输入的数字是否正确。

这种称为13位数字的“1-3和”的计算方法是,从第一位开始乘1,每个数字交替乘以1和3,然后算出相加的和。

例如,9780921418948的“1-3和” 的计算如下:9*1+7*3+8*1+0*3+9*1+2*3+1*1+4*3+1*1+8*3+9*1+4*3+8*1=120要求输入商品编码,计算对应的“1-3和”。

样例输入:9780921418948样例输出:120varc:char;s,i,n,m:integer;begins:=0;for i:=1 to 13 do beginread(c);if i mod 2=1 then m:=1 else m:=3s:=s+m*(ord(c)-48);0 ascii 码48end;writeln(s);end.输入 1234567890123 输出 95 输入 1230145678922 输出 94输入 3309890786442 输出 139 输入 9978564578341 输出 156四、寻找x的幂(文件名xzxdm.pas)数学上把x的k次方叫x的k次幂,如4的3次幂为4自乘3次。

给定一个整数n,请输出距离它最近的那个x的幂是多少。

如果有两个距离相同,输出那个小的。

输入整数x(2 ≤ x ≤ 5)和n(10 ≤ n ≤ 20000),输出一个整数,表示距离最近的那个x的幂。

样例输入:2 17样例输出:16varn,x,tp,tp1:integer;beginreadln(x,n);tp:=x;repeattp:=tp*x; 幂until tpn;tp1:=tp div x;if tp-n=n-tp1 then writeln(tp1)else writeln(tp);end.1、输入:3 80输出:812、输入:5 625输出:6253、输入:4 12288输出:163844、输入:2 5768输出:4096五、表达式计算(文件名bds.pas)输入一个正整数n(1≤n≤500),求s=1+2-3+4+5-6+7+8-9+??+n,并统计其中共有多少个减号。

输入只有1行,一个正整数n。

输出文件也只有一行,二个整数,中间用空格隔开,分别表示s的值和减号的个数。

样例:输入: 15输出:30 5vari,s,k,n:longint;beginreadln(n);s:=0 ; k:=0;for i:=1 to n doif i mod 3=0 then begink:=k+1 ; s:=s-i;endelse s:=s+i;writeln(s, ,k);end.输入 45 输出 315 15 输入 500 输出 42084 166输入 200 输出 6834 66 输入 139 输出 3244 46六、有趣的质数(文件名:yqdzs.pas)小明发现了一个有趣的现象,有些数字(例如:2333)本身是个质数,将末尾数去掉后发现它仍然是质数,依此类推,一直到第一位仍是质数(含1)。

现在给定m和n的值(mn≤30000),求在这个范围内有多少个这种数字。

输入输出示例:输入:50 100输出:5说明:五个符合的质数是53、59、71、73、79。

varn,m,i,a,j,t:longint;f:boolean;beginread(n,m);for i:=n to m do begina:=i;f:=true;repeatfor j:=2 to trunc(sqrt(a)) doif a mod j=0 then f:=false;a:=a div 10;until (a=0) or (f=false);if f then inc(t);end;writeln(t);end.输入5 257输入 50 150032输入 9000 11000 输出 0输入 29000 29500 输出 1七、素数算式(文件名:ssss.pas ssss.bas在下面的算式中每个“#” 都表示一个素数数字。

##*#ssss.lgo)【篇二:noip普及组复赛模拟试题23(答案)】lass=txt>给出用等号连接的两个整数,如“1234=127”。

当然,现在这个等号是不成立的。

题目让你在左边的整数中间某个位置插入一个加号,看有没有可能让等号成立。

以上面的式子为例,如果写成123+4=127,这就可以了。

请你编写一个程序来解决它。

input 只有那个不相等的式子。

已知,等号两边的整数都不会超过 200000000000。

output 如果存在这样的方案,请输出那个正确的式子。

如果不存在解决方案,请输出“impossible!”(引号中的部分)。

sample input 1234=127sample output 123+4=127program ex1075;var i,len,p:integer;a1,a2,b:longint;st,st1,st2,st3:string;beginreadln(st);p:=pos(=,st);st1:=copy(st,1,p-1);delete(st,1,p);val(st,b,x);len:=length(st1);for i:=1 to len-1 dobeginst2:=copy(st1,1,i);val(st2,a1);st3:=copy(st1,i+1,len-i);val(st3,a2);if a1+a2=b then begin writeln(a1,+,a2,=,b);exit; end;end;writeln(impossible!)end.输入 45789=5793输出 4+5789=5793输入 34345678932=343456821输出 343456789+32=343456821输入 123456789=12345输出impossible!1985764235=1985999输出 1985764+235=1985999给若干个字符串,判断该字符串最多重复了几次,比如,给ababab,结果是3,因为ab重复了3次,因为求最多重复了几次,所以结果不是1,在比如abcdabcd结果是2,abcd结果是1.输入一组字符串,以“。

”作为结束标志。

样例输入1aaaa abcd。

样例输出 41varp:array[0..1000000]of longint;s:ansistring;procedure work;vari,j:longint;beginfillchar(p,sizeof(p),0); j:=0;fori:=2 to length(s) do{自己和自己匹配} beginwhile (j0)and(s[j+1]s[i])do j:=p[j];ifs[j+1]=s[i] then inc(j); p[i]:=j;end;if(length(s)mod(length(s)-p[length(s)])=0)and(length(s)(length(s)-p[length(s)]))then writeln(length(s) div (length(s)-p[length(s)])){p数组的应用使得求解方便得很。

} elsewriteln(1);end;beginreadln(s);whiles. do begin work; readln(s);end;end.输入xyzxyzteateatecatcatcat.输出 213输入 yyyyuyyyyyyyteletele.输出172【题目描述】蚊子最近经常做噩梦,然后就会被吓醒。

这可不好。

疯子一直在发愁,然后突然有一天,他发现蚊子其实就是害怕某些事。

如果那些事出现在她的梦里,就会害怕。

我们可以假定那个害怕的事其实是一个字符串。

而她做的梦其实也是一个字符串。

她可以一个晚上一直做梦,所以梦这个字符串会很长,如果其中包含了她所害怕的事情,那么她这天晚上就会害怕。

当然一个害怕的事也可能在这天晚上被她梦到很多遍,当然每个晚上也可能有很多种害怕的事都被梦到。

相关文档
最新文档