【#文档大全网# 导语】以下是®文档大全网的小编为您整理的《(NOIP)数组作业二》,欢迎阅读!
1.读入一个十进制自然数,要求将其转换成二进制数后输出。
分析:将十进数转换成二进制数,一般采用除二取余法。如果用一个数组b来存放二进制数,可以依次把所得的余数存入b[0]、b[1]、…、b[n],最后按b[n]、b[n-1]、…、b[1]、b[0]的顺序输出这些余数,就得到了所求的二进制数。
2.输入一串字符,字符个数不超过100,且以“.”结束,请判断它们是否构成回文。若是回文,则输出'Yes„,否则输出'No'。
分析:所谓回文指从左到右和从右到左读一串字符的值是一样的,如12321,ABCBA,AA等。先读入要判断的一串字符(存入数组letter中),并统计这串字符的长度,然后首尾字符比较,若相等则取下一对字符再比较,……,就可以判断出是否为回文。
3.输入一个以„.‟结束的字符串,统计并输出其中各小写字母出现的次数。
分析:引入一个下标类型为字符子界的数组num,用于存放字符串中各小写字母出现的次数。例如用num[„a‟]记录字母a出现的次数。开始时应将num的每个元素置成0,当读入一个ch后,若ch是小写字母,则让num[ch]加1。
参考答案 var
i,j,n:longint;
b:array [0..31] of 0..1; begin
readln(n); write(n,'=('); i:=0;
while( n<>0 )do begin
( b[i]:=n mod 2 );
i:=i+1; {指定下一个余数的存放位置} n:=n div 2 {产生的商将作为新的被除数} end;
for j:=( i-1 downto 0 )do write(b[j]); writeln(')2') end.
var
letter:array[1..100]of char; i,j:0..100; ch:char; begin
read(ch);
( i:=0 ); while ch<>'.' do begin i:=i+1;
( letter[i]:=ch ); read(ch) end;
( j:=1 );
while (j( letter[i]=letter[j] )do begin i:=i-1; j:=j+1; end;
if ( j>=i )then writeln('Yes') else writeln('No'); end. var
num:array['a'..'z'] of integer; ch:char; begin
for ch:='a' to 'z' do( num[ch]:=0 ); read(ch);
while ch<> '.' do begin
if ( (ch>='a') and (ch<='z') )then num[ch]:=num[ch]+1; ( read(ch) ); end;
for ch:=( 'a' to 'z' )do
if num[ch] <>0 then writeln(ch,' ',num[ch]); end.
本文来源:https://www.wddqxz.cn/e91ae260cb50ad02de80d4d8d15abe23482f03b7.html