Nhập vào một số n (n<=10^6),đếm xem từ có bao nhiêu số x < n thoả mãn điều kiện sau: 10<x<n. +x là số có 2 chữ số và các chữ số phải giống nhau +x chia hết cho 9 Ví dụ sau: n=300 In ra 1 ( có số 99 thoả mãn) n=1412 In ra 3 ( có số 99;333;999)
2 câu trả lời
program hello;
uses crt;
var n, d, a, b, i: longint;
begin
readln(n);
for i:= 99 to n - 1 do
if i mod 9 = 0 then
begin
a:= i mod 10;
b:= i;
while a = b mod 10 do b:= b div 10;
if b = 0 then d:= d + 1;
end;
writeln(d);
readln;
end.
====================================
Số nhỏ nhất có hai chữ số giống nhau và chia hết cho 9 là 99 nên vòng lặp bắt đầu từ 99 nếu n nhỏ hơn hoặc bằng 99 thì không cần tính và in ra 0
Khi i chia hết cho 9 thì ta cho a = một số trong i ( a = i mod 10) và gán b = i
So sánh a với b mod 10 nếu bằng nhau thì b = b div 10 để so sánh tiếp.
khi so sánh hết và b = 0 thì đó là số cần tìm và cộng d thêm 1.
Trong ví dụ ở trên thì số 666 sẽ chia hết cho 9 và có các chữ số giống nhau
- Nếu x có ít nhất 2 chữ số:
uses crt;
var a,n,d:longint;
begin
clrscr;
readln(n);
a:=3;d:=0;
repeat
a:=a*10+3;
if a < n then
if a mod 9 = 0 then
inc(d);
until a >= n;
a:=9;
repeat
a:=a*10+9;
if a < n then
inc(d);
until a >= n;
writeln(d);
readln;
end.
- Nếu x phải là số có 2 chữ số :v
uses crt;
var a,n,d:longint;
begin
clrscr;
readln(n);
if n > 99 then write(1)
else write(0);
readln;
end.
- Thiếu số 666 nên thêm vô 1 ít :))
uses crt;
var a,n,d:longint;
begin
clrscr;
readln(n);
a:=3;d:=0;
repeat
a:=a*10+3;
if a < n then
if a mod 9 = 0 then
inc(d);
until a >= n;
a:=6;
repeat
a:=a*10+3;
if a < n then
if a mod 9 = 0 then
inc(d);
until a >= n;
a:=9;
repeat
a:=a*10+9;
if a < n then
inc(d);
until a >= n;
writeln(d);
readln;
end.