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

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

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 6

Var X,Y,i,j,la,lb:longint;

procedure ze(m:longint);

var l0,l1:longint;

begin l0:=0;l1:=0;

while m<>0 do

begin 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 do

begin 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。

【文件输出】:

文件中只有一个整数,为最大的连续段总和。

【输入样例】:

5

1 -

2

3 1 -4

【输出样例】

4

var

s:array[1..10000] of longint;

n,ii,t,ans:longint;

begin

readln(n);

for i:=1 to n do

read(s[i]);

t:=s[1];ans:=s[1];

for i:=2 to n do

begin

if t<0 then t:=s[i] else t:=t+s[i];

if t>ans then ans:=t;

end;

writeln(ans);

end.

输入6

1 5 4 -

2 6

3 输出17

输入10

24 -12 9 11 7 20 -8 15 3 18 输出87

输入7

10 8 9 -5 12 6 11 输出51

输入20

5 12 19 20 -7 -

6 18 22 19 8 11 33 15 32 1

7 -30 4 14 24 -13输出230

我们定义f(x)为x最大的奇数因数。比如f(18)=9,输入N,输出f(1)+f(2)+……+f(n).

输入文件:一个整数N,输出文件:输出连加的和。

样例输入:5 样例输出:11

Var ans,n,i:longint;

Begin readln(n);

While n>0 do

Begin if odd(n) then ans:=ans+(1+n)*(n+1) ndiv 4

Else ans:=ans+n*n div 4;

N:=n div 2;

End;

Write(ans);

End.

输入12 输出50 输入456 输出69336

输入1000 输出333396

输入10000 输出33333566

对于一个有序序列,想知道某个数是否在里面,若在,则返回其在序列中的位置;若不在,则返回NO。输入文件XL.in。第1行的N表示共有N个数;接下来是N个数;最后一行是要询问的数K。输出文件XL.out。仅一行,若K在序列中,返回其在序列中的位置,否则输出NO。

【样例输入】XL。IN : 5

1 3 4 7 8

4 【样例输出】XL。OUT :3

【样例输入】XL。IN: 7

1 2 4 5 8 9 11

6【样例输出】XL。OUT :NO

V AR N,K,I:INTEGER;

A:ARRAY[1。。10000]OF INTEGER;

PROCEDURE SEARCH(L,R:INTEGER);

V AR I,J,M:INTEGER;

BEGIN IF ABS(L-R)=1 THEN IF K=A[L] THEN

BEGIN WRITELN(L);CLOSE(OUTPUT);

HALT;END

ELSE IF K=A[R] THEN BEGIN

WRITELN(R);CLOSE(OUTPUT);HA TL;END

ELSE BEGIN

WRITELN(‘NO’);CLOSE(OUTPUT);HALT;END;

I:=L;J:=R;M:=(I+J)DIV 2;

IF K

IF K>A[M] THEN SEARCH(M+1,R);

IF A=A[M] THEN BEGIN WRITELN(M);CLOSE(OUTPUT);HALT;END;

END;

BEGIN

ASSIGN(INPUT,‘XL。IN’);

RESET(INPUT);

ASSIGN(OUTPUT,‘XL。OUT’);

REWRITE(OUTPUT);

READ(N);

FOR I:=1 TO N DO READ(A[I]);

READ(K);

SEARCH(L,N);

END。

【问题描述】将1~n这n个数字首尾相连,形成一个圆环,要求圆环上任意两个相邻的数字之和都是一个素数,请编程输出符合条件的素数环。

【输入数据】输入数据仅一行,包含一个正整数n(n<=20)。

【输出数据】输出数据最多包括10行,每行由n个整数组成,表示前十个符合条件的素数环(不足十个时全部输出)。所有素数环第一个元素必须是1,且按照从小到大的顺序排列。

【输入样例】

输入

6

相关文档
最新文档