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

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

Description 给定整数n(32位以内),判断它是否为2的方幂。是就输出'yes',否则输出'no'。

Input 一个整数n。

Output 一个字符串

Sample Input 4

Sample Output yes

Hint

n > 0 && ( ( n & ( n - 1 ) ) == 0

貌似是数学问题,套用了提示

program ex1560;

var n:longint;

begin

readln(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.IN

4

3.0.5

1

2.4

2.4.6

VERSIONS.OUT

1

2.4

2.4.6

3.0.5

var n,i:integer;

scan:array [1..30] of string;

function check(aa,bb:string):boolean;

var

a,b:longint;

i,j:integer;

code:integer;

begin

aa:=aa+'.'; bb:=bb+'.';

i:=pos('.',aa); j:=pos('.',bb);

while (i>0) and (j>0) do begin

val(copy(aa,1,i-1),a,code);

val(copy(bb,1,j-1),b,code);

if a

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);

var

i,j:integer;

t:string;

begin

if l>=r then exit;

i:=random(r-l)+l;

t:=scan[i];scan[i]:=scan[l];

i:=l;j:=r;

repeat

while (i

if i=j then break; scan[i]:=scan[j];

while (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;

begin

readln(n);

for i:=1 to n do readln(scan[i]); qsort(1,n);

for i:=1 to n do writeln(scan[i]); end.

输入7

3.0.5.1

1.0

2.2

2.2.6

2.2.8

3.0.5.4

3.0 输出

1.0

2.2

2.2.6

2.2.8

3.0

3.0.5.1

3.0.5.4

输入

12

1

1.0.2

1.0.3

6.2

3.4

3.4.2

2

2.1

2.1.4

3.4.1

4.2

4.2.2

输出 1

1.0.2

1.0.3

2

2.1

2.1.4

3.4

3.4.1

3.4.2

4.2

4.2.2

6.2

输入正整数N、M,求N÷M的值。如果商的小数部分出现循环节,则输出时要求用圆括号将循环节括起来,如果商为整数,则输出为整数。例如:

1÷2=0.51÷3=0.(3) 22÷5=4.4 33÷3=11

输入:N M

输出:N÷M的值(保证小数点后不超过50位,而且未尾不能有多余的0)

样例:输入:N,M=45 56

输出:0.803(571428)

程序:

Var n,m:real;r,c:array[0..50] of real;i,j,k,flag: integer;

begin write('N,M='); readln(n,m);

k:=0; flag:=1;

if m<>0 then begin

c[0]:=int(n/m); r[0]:=n-m*c[0];

while (r[k]<>0) and (flag=1) do begin

c[k+1]:=int((r[k]*10)/m); r[k+1]:=r[k]*10-m*c[k+1];

k:=k+1; i:=0;

if k=50 then flag:=0;

while (i

if (r[i]=r[k]) then flag:=0;

i:=i+1;

end;

end;

if r[0]<>0 then write(c[0]:0:0, '.') else write(c[0]:0:0);

for j:=1 to i-1 do write(c[j]:0:0);

if r[k]<>0 then write('(');

if r[0]<>0 then for j:=i to k do write(c[j]:0:0);

if r[k]<>0 then writeln(')') else writeln; writeln;

end else writeln('b=0');

readln;

end. 37 92输出0.40(2173913043478260869565)

6 103输出0.(0582524271844660194174757281553398)

100 50 输出2

50 37 输出1.(351)

现在是晚餐时间,而母牛们在外面分散的牧场中。

农民约翰按响了电铃,所以她们开始向谷仓走去。

你的工作是要指出哪只母牛会最先到达谷仓(在给出的测试数据中,总会有且只有一只速度