Những bài này mình tự làm được hết rồi nhưng mà mình đăng lên để mọi người chia sẻ thuật toán với nhau sao cho nó tối ưu nhất nhé. Mình cảm ơn !
Bài 1:Số chính phương kép.
Định nghĩa số chính phương kép : Là số chính phương có các chữ số khác 0. Và nếu bớt đi mỗi chữ số của nó một đơn vị thì cũng được một số chính phương.
Yêu cầu: Bạn hãy kiểm tra xem một số có là số chính phương kép không.
ví dụ
inp out
36 YES
Bài 2:Công thức hóa học.
Nhập vào bàn phím một CTHH của hợp chất, hãy tính:
a)số lượng nguyên tố có trong công thức
b)tổng số các nguyên tử có trong công thức.
lưu ý:
nguyên tố hóa học chỉ là các nguyên tố có một chữ cái
số lượng nguyên tố tối đa là 2 chữ số
VÍ DỤ
H2O a)2
b)3
C6H12O6 a)3
b)24
Bài 1: (số 36 là sai nha bạn vì số 3 không phải là số chính phương)
const fi=’scpk.inp’;
fo=’scpk.out’;
var f:text;
n,i:longint;
s:string;
kt:boolean;
function cp(x:longint):boolean;
begin
if sqr(trunc(sqrt(x)))=x then cp:=true
else cp:=false;
end;
begin
assign(f,fi);reset(f);readln(f,n);close(f);
assign(f,fo);rewrite(f);
str(n,s);
for i:=1 to length(s) do
if s[i]=’0′ then kt:=false
else
begin
if cp(n)=true then n:=n div 10;
if cp(n)=true then kt:=true else kt:=false;
end;
if kt=true then write(f,’yes’) else write(f,’no’);
close(f);
end.
Bài 2:
const fi=’cthh.inp’;
fo=’cthh.out’;
var f:text;
d,i,x,kt,tong:longint;
s,t:string;
function dcs(x:longint):longint;
begin
dcs:=0;
repeat
dcs:=dcs+1;
x:=x div 10;
until x=0;
end;
begin
assign(f,fi);reset(f);readln(f,s);close(f);
assign(f,fo);rewrite(f);
d:=0;
for i:=1 to length(s) do
if s[i] in [‘A’..’Z’] then inc(d);
i:=0; t:=”; tong:=0;
while i<=length(s) do
begin
while (s[i] in [‘0’..’9′]) and (i<=length(s)) do
begin
t:=t+s[i];
val(t,x,kt);
inc(i);
end;
if dcs(x)<3 then tong:=tong+x;
x:=0;
t:=”;
inc(i);
end;
writeln(f,d);
writeln(f,tong);
close(f);
end.