题目描述
输入一串只有六个单词和一个句号的句子,单词与单词之间空格隔开,把其中所有数字找出来(正常:one...ten,特殊:a both another first second third)把每个数字的平方排序(不足两位数的前面补零),组成最小的数字(开头去零)输出。
样例输入
Black Obama is two five zero .
样例输出
425
思路
O(N^2)
按题意把所有数字平方后排序输出。
var
a,b,ans:
string;
i,j,k,l:longint;
z:
array[
1..
20]
of longint;
c:
array[
1..
10]
of string;
begin
readln(a);
for i:=
1 to 6 do
begin
j:=pos(
' ',a);
if pos(
'.',a)<j
then j:=pos(
'.',a);
b:=copy(a,
1,j-
1);
if (b=
'one')
or(b=
'a')
or(b=
'another')
or(b=
'first')
then inc(z[
1]);
if (b=
'two')
or(b=
'both')
or(b=
'second')
then inc(z[
2]);
if (b=
'third')
or(b=
'three')
then inc(z[
3]);
if b=
'four' then inc(z[
4]);
if b=
'five' then inc(z[
5]);
if b=
'six' then inc(z[
6]);
if b=
'seven' then inc(z[
7]);
if b=
'eight' then inc(z[
8]);
if b=
'nine' then inc(z[
9]);
if b=
'ten' then inc(z[
10]);
if b=
'eleven' then inc(z[
11]);
if b=
'twelve' then inc(z[
12]);
if b=
'thirteen' then inc(z[
13]);
if b=
'fourteen' then inc(z[
14]);
if b=
'fifteen' then inc(z[
15]);
if b=
'sixteen' then inc(z[
16]);
if b=
'seventeen' then inc(z[
17]);
if b=
'eighteen' then inc(z[
18]);
if b=
'nineteen' then inc(z[
19]);
if b=
'twenty' then inc(z[
20]);
delete(a,
1,j);
end;
for i:=
1 to 20 do
while z[i]<>
0 do
begin
inc(j);
str(i*i,c[j]);
k:=length(c[j]);
if k>
2 then delete(c[j],
1,
1);
if k=
1 then insert(
'0',c[j],
1);
dec(z[i]);
end;
for i:=
1 to j-
1 do
for k:=i+
1 to j
do
if c[i]>c[k]
then
begin
b:=c[i];c[i]:=c[k];c[k]:=b;
end;
if c[i,
1]=
'0' then delete(c[i],
1,
1);
for i:=
1 to j
do
write(c[i]);
end.
转载请注明原文地址: https://ju.6miu.com/read-659979.html