Kênh Tên Miền chuyên cung cấp tên miền đẹp, giá rẻ! Hãy liên hệ kỹ thuật: 0914205579 - Kinh doanh: 0912191357 để được tư vấn, hướng dẫn miễn phí, Cảm ơn quý khách đã ủng hộ trong thời gian qua!
Sunday, December 22, 2013



Số cấp nhân



           Tìm các số tự nhiên có ba chữ số. Ba chữ số này, theo trật tự từ trái qua phải tạo thành một cấp số nhân với công bội là một số tự  nhiên khác 0.

Đặc tả
Chú ý rằng ta chỉ xét các cấp số trên dãy số tự nhiên với công bội dlà một số nguyên dương. Gọi x là số cần tìm, ta có:
           1.  x là số có ba chữ số: x = 100*a + 10*b + c.
           2.  a= 1..9; b = a*d; 0 < c = a*d*d£ 9.
           Hệ thức 2 cho phép ta tính giới hạn trên của d:
d là số nguyên nên ta phải có d £ trunc(sqrt(9 div a)), trong đó sqrt là hàm tính căn bậc hai, trunclà hàm lấy phần nguyên.
Ta cho a biến thiên trong khoảng 1..9 rồi cho công bội d biến thiên trong khoảng từ 1 đến trunc(sqrt(9 div a)). Với mỗi cặp số a và d ta tính
x = 100*a+10*a*d+a*d*d= a*(100+10*d+d*d)
Tuy nhiên, ta có thể nhẩm tính trước cận trên của d thì sẽ đỡ phải gọi các hàm trunc và sqrt là những hàm thao tác trên số thực do đó sẽ tốn thời gian.

a
1
2
3
4
5
6
7
8
9
Cận trên d
3
2
1
1
1
1
1
1
1
(*  Pascal  *)
(*----------------------------
   Cac so tu nhien 3 chu so
   lap thanh cap nhan
------------------------------*)
program CapNhan;
uses crt;
const MN = 30;
      cd: array[1..9] = (3,2,1,1,1,1,1,1,1);
var s: array [1..MN] of integer;
      n: integer;
function Tim: integer;
var a,d,n: integer;
begin
  n:= 0;
  for a:= 1 to 9 do
    for d:=1 to cd[a]do
    begin
     inc(n); s[n]:= a*(100+10*d+d*d);
    end;
  Tim:= n;
end;
procedure Xem(n: integer): tự viết
BEGIN
  clrscr; n:= Tim; Xem(n);
  writeln; write('Tong cong ',n,' so'); readln;
END.

0 comments:

Post a Comment

Popular Posts