Olimpiada misollarini yechish usullari II- bosqich Muallif: Mengliyev Sh. Qo`shilgan sana: 2015-04-08 Olimpiada misollarini yechish usullari II – bosqich


Download 43.84 Kb.
bet4/12
Sana24.04.2023
Hajmi43.84 Kb.
#1394008
1   2   3   4   5   6   7   8   9   ...   12
Bog'liq
олимпиада учун масалалар

for i := 1 to n do s := s*a 
end;
Asosiy dasturda bittadan raqam ajratishga to’g’ri keladi, biz bu jarayon bilan ham tanishmiz (10 ga bo’lganda chiqqan qoldiq - oxirgi raqam, 10 ga butun bo’lish orqali oxirgi raqamni tashlab yuborgan holda sonni 10 baravar kamaytirish). 
Har bir raqam darajaga ko’tariladi va natijalar qo’shiladi, so’ngra ko’rib chiqilayotgan son bilan solishtirish jarayoni olib boriladi, agar tenglik bajarilsa, unda ko’rib chiqilayotgan son - Armstrong sonidir.
for x := min to max do 
begin 
p := x; s := 0; 
for i := 1 to n do 
begin 
extent(p mod 10, n, k); 
s := s + k; 
p := p div 10 
end
if s = x then write(x, ' ') 
end;
Dastur
Program L84; { Armstrong sonlari }
uses Crt; 
var 
n, min, max, x, p, s, i, k : longint; 
Procedure extent(a, n : longint; var s : longint); 
var 
i : longint; 
begin 
s := 1; 
for i := 1 to n do s := s*a 
end
Procedure minmax(n : longint; var min, max : longint); 
var 
i : longint; 
begin 
min := 1; 
for i := 1 to n - 1 do min := min*10; 
max := min*10 - 1 
end
begin 
write('Sondagi raqamlar miqdorini kiriting'); readln(n); 
writeln(n, '-xonali Armstrong sonlari'); 
minmax(n, min, max); 
for x := min to max do 
begin 
p := x; s := 0; 
for i := 1 to n do 
begin 
extent(p mod 10, n, k); 
s := s + k; 
p := p div 10 
end
if s = x then write(x, ' ') 
end
writeln 
end.
85-misol. 1 dan n gacha bo’lgan sonlarning har biriga o’zining bo’luvchilarini chop etuvchi dasturni tuzing. Masalan, 1 5 7 35 lar 35 sonining bo’luvchilari. Shunga o’xshash bo’luvchilar ro’yxati 1 dan kiritilgan n gacha bo’lgan sonlar uchun chop etilishi kerak.
Algoritm
Dastur juda oson tuziladi. Buning uchun sonning bo’luvchilarini aniqlash prosedurasini tashkil etish (dasturni biz oldingi misollarda tahlil qilib chiqqan edik) va berilgan oraliqdagi har bir son uchun unga murojaat qilish kerak. 
Quyidagi sodda dastur hosil bo’ladi. Bitta qo’shimcha. Prosedurada bo’luvchiar sonini aniqlashda sonning bo’luvchilari uning butun yarmigacha (n div 2) tekshiriladi, lekin biz bilamizki, sonning bo’luvchilari uning kvadrat ildizigacha bo’ladi va ularni trunc(sqrt(n)) gacha topgan edik. Bu faqatgina ko’rish maqsadida qilingan bo’lib - birinchi holda bo’luvchilar ekranga o’sib borish tartibida chiqariladi va bu chiroyliroq ko’rinadi. 
Program L85; 
uses Crt;
var 
i, n : integer; 
Procedure math_divisor(n : integer); 
var 
d : integer; 
begin 
for d := 1 to n div 2 do 
if n mod d=0 then write(d, ' '); 
writeln(n) 
end
begin 
write('Oraliqning o’ng chegarasini kiriting'); readln(n); 
for i := 1 to n do 
begin 
write( i, ' soning bo’luvchilari quyidagilar:'); 
math_divisor(i) 
end 
end.
86-misoln soning to’g’ri boluvchilarining yig’indisini hisoblovchi prosedurani yozing. n soning to’g’ri bo’luvchilari deb o’zidan tashqari barcha bo’luvchilariga aytiladi. Masalan, agar n 12 ga teng bo’lsa, u holda to’g’ri bo’luvchilar yig’indisi 1 + 2 + 3 + 4 + 6 = 16. Ushbu prosedura ishining to’g’riligini tekshirish uchun berilgan [a; b] oraliqdan n ning turli xil qiymatlarini hisoblab topuvchi asosiy dasturni yozing.

Download 43.84 Kb.

Do'stlaringiz bilan baham:
1   2   3   4   5   6   7   8   9   ...   12




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling