noip普及组复赛模拟试题8(答案)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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) 现在是晚餐时间,而母牛们在外面分散的牧场中。 农民约翰按响了电铃,所以她们开始向谷仓走去。 你的工作是要指出哪只母牛会最先到达谷仓(在给出的测试数据中,总会有且只有一只速度