NOIP2005普及组解题报告
陶陶摘苹果
apple.pas
本题是一道基础题,只要大家认真、细心都可以做出来,具体分析如下:
【具体分析】
首先将10个数输入放入A数组,然后将N(手可以够到的高度)加上30为站上椅子能够到的高度。最后将其与10个数进行比较把小于等于的加入累加变量Total。
【变量说明】
A:10个苹果的高度
N:手可以够到的高度
Total:累加器,累加可以摘的个数
【源程序】
Program apple;
var A:array[1..10] of integer;
N,I,Total:integer;
Begin
Assign(input,'in.in');reset(input);
for i:=1 to 10 do
read (a);
Readln(n);
Close(input);
N:=n+30;
For I:=1 to 10 do
If n>=a[I] then inc(total);
Assign(output,'apple.out');rewrite(output);
Writeln(total);
Close(output);
End.
校门外的树
tree.pas
本题是一道较为简单的题,不要把题目复杂化,具体分析如下:
【具体分析】
因为树的最大数量为10000,所以可以直接进行运算。首先设一标志数组为aa,false表示被移走,true表示还没有被移走,先赋值为true表示全没有被移走,然后输入表示要用做铁路的路段的两端点坐标。然后用循环把移走的树的标志数组赋值为false,最后对没有移走的进行累加,打印。
【变量说明】
aa:标志数组,表示树的状态,false表示被移走 true表示没有被移走
I,J:用做铁路的两端点坐标
S:累加器,累加没有被移走的个数
【源程序】
Program tree;
Var aa:array[0..10000]of boolean;
m,n,i,j,l,a,b,s:integer;
Begin
Assign(input,'tree.in');reset(input);
Assign(output,'tree.out');rewrite(output);
Readln(l,m);
For a:=0 to l do
aa[a]:=true;
For a:=1 to m do
Begin
Readln(i,j);
For b:=i to j do
aa:=false;
End;
For a:=0 to l do
if aa[a] then inc(s);
Writeln(s);
Close(input);
Close(output);
End.
循环
circle.pas
本题主要考察的是对字符串和数的处理,具体分析如下:
【具体分析】
大家都知道要取数的后面的N位就要用数去除以10n。所以题目就容易解决了。首先输入SS为要乘的正整数和要求的位数,因为输入的是一个字符串,所以只有找空格来读入两个数。将要乘的数放入s1中,剩下的length(ss)-I位为要求的位数放入k中。又因为经过实验发现当k超过20时是不存在的,所以当k大于20时可以直接打印-1,但相反如果小于20,首先对输入的 k进行处理,可以算出用于取后k位的L来。然后进行循环用输入的s1乘以s1再取后k位,然后又把新得到的要乘的数乘以s1在取后k位……依次反复,当得到的数的后k位等于s1的后k位时结束,否则依然继续直到循环10000次。
【变量说明】
ss:输入的要乘的数和要求的位数
s1:表示要乘的数
l:用来取最后k位的数
m:循环的次数
【源程序】
program circle;
var s1,s2,ss:string;
b,c,m,n,i,j,l,k,s:longint;
a:longint;
t,p:integer;
begin
assign(input,'circle.in');reset(input);
assign(output,'circle.out');rewrite(output);
readln(ss); {输入要乘的数和要求的位数k}
i:=pos(' ',ss); {找空格的位置分开两个数}
s1:=copy(ss,1,i-1);
val(copy(ss,i+1,length(ss)-i),k,t);
if k<20 then
begin
s2:=copy(s1,length(s1)-k+1,k);
val(s2,n,p);
l:=1;
s:=1;
for a:=1 to k do {求出要L的值}
l:=l*10;
s:=n;
repeat
inc(m);
s:=s*n mod l; {S*N mod L为下个循环的后k位}
until (s=n) or (m=100000);
if m=100000 then writeln(-1) else writeln(m);
end
else writeln(-1); {输出无解}
close(input);
close(output);
end.