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

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

0 bình luận về “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”

  1. 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.

    Bình luận

Viết một bình luận