ВХОД

МЕТОДИЧЕСКИЕ РАЗРАБОТКИ ПО КУРСУ ИНФОРМАТИКИ

"ПРОГРАММИРОВАНИЕ НА ЯЗЫКЕ PASCAL"

Начало > Глава IV. Близнецы, Дружественные > Общие задачи с использованием этоих алгоритмов

ГЛАВА IV

ОБЩИЕ ЗАДАЧИ

Близнецы и дружественные числа



1. Проверить утверждение: количество пар двузначных близнецов равно количеству пар трехзначных дружественных чисел.
  Переход
Блок-схема

2. Найти первое дружественное число, сумма цифр которого - число близнец.
  Переход
Блок-схема

1. Проверить утверждение: количество пар двузначных близнецов равно количеству пар трехзначных дружественных чисел.
Ответ:

220 284
Количество пар дружественных чисел = 1

3 и 5 близнецы
5 и 7 близнецы
Количество пар чисел близнецов = 2

Количество пар двузначных близнецов равно количество пар трехзначных дружественных чисел: False

program block4_01;
uses crt;
var
a,s,b,i,s1,koldr:integer;
    {a - первое число;
    i - делители числа a;
    s - сумма делителей первого числа;
    b - делители числа s;
    s1 - сумма делителей s;
    koldr - количество пар дружественных чисел }
kolb, ii, d1, d2,k,k1:integer;
    {i - первое число;
    ii - второе число;
    d1, d2 - делители для первого и второго числа
    k, k1 - количество делителей для первого и второго числа;
    kolb - количество пар близнецов }

p:boolean; {проверка истинности условия задачи}
begin
clrscr;

{Первая часть программы: поиск трехзначных дружественных чисел}
    koldr:=0;
    for a:=100 to 1000 do
    begin
    s:=0; {для каждого числа a будем искать свою сумму делителей, поэтому сначала она равна 0}
    for i:=1 to a-1 do
      if a mod i=0 then s:=s+i; {нашли сумму делителей числа a}
    s1:=0;
    for b:=1 to s-1 do
      if s mod b=0 then s1:=s1+b; {нашли сумму делителей для s}
    if (s1=a) and (s< >a) and (s > a) then {условие s>a для отсечения повторяющихся пар чисел}
      begin
      inc (koldr); {увеличиваем количество пар дружественных чисел на 1}
      writeln(a:10,s:10)
      end;
    end;

writeln ('Количество пар дружественных чисел= ',koldr);

{Вторая часть программы: поиск двузначных чисел близнецов} writeln;
    for i:=1 to 10 do {i - младшее число пары}
    begin
    k:=0; {поиск количества делителей младшего числа}
    for d1:=1 to i do
      if (i mod d1)=0 then inc(k);
    ii:=i+2; {ii - старшее число пары}
    k1:=0; {поиск количества делителей старшего числа}
    for d2:=1 to ii do
      if (ii mod d2)=0 then inc(k1);
    if (k=2) and (k1=2) then {если в обоих случаях количество делителей равно 2, то пара чисел - близнецы}
      begin
      writeln (i, ' и ', ii , ',близнецы');
      inc(kolb)
      end;
    end;

writeln ('Количество пар чисел близнецов = ',kolb);
p:=koldr=kolb;
writeln; Writeln('Количество пар двузначных близнецов равно количество пар трехзначных дружественных чисел: ',p);
end.


2. Найти первое дружественное число, сумма цифр которого - число близнец.

Ответ:
5020


program block4_02;
uses crt;
var a: integer;
b, i, s, s1: integer; ch:integer;
    {a - первое число;
    b - делители числа s;
    i - делители числа a;
    s - сумма делителей первого числа;
    s1 - сумма делителей s}
sumdr, ii, d1, d2,k,k1:integer;
    {i - первое число;
    ii - второе число;
    d1, d2 - делители для первого и второго числа
    k, k1 - количество делителей для первого и второго числа;
    sumdr - сумма цифр }
f:boolean;{ для условия цикла}

begin
clrscr; a:=2; sumdr:=1;

while f< >true do {цикл для проверки первых чисел}
    begin
    f:=false;
    inc(a);
      sumdr:=0; {сумма цифр дружественного числа=0}
      s:=0;
      for i:= 1 to a-1 do {находим все делители числа а,
      исключая само число}
        if a mod i = 0 then s:= s+i; {находим сумму делителей числа а}

      s1:=0;
      for b:= 1 to s-1 do {цикл для проверки вторых чисел, которые являются суммой делителей первого числа}
        if s mod b = 0 then s1:= s1 +b; {находим все делители чила s (сумма делителей числа а)}

      if (s1=a) and (s< >a) and (s>a) {если число дружественное, то находим сумму его цифр}
      then
        begin

        ch:=s1;
        while ch<>0 do begin sumdr:=sumdr+(ch mod 10); ch:=ch div 10;end;
        {writeln(s1)};
        {writeln('sumdr=',sumdr)}

        end;
      {++++++++++++}
      {Вторая часть программы: поиск двузначных чисел близнецов}
      i:=sumdr; {i - старшее число пары}
      k:=0; {поиск количества делителей младшего числа}
      for d1:=1 to i do
        if (i mod d1)=0 then inc(k);
      ii:=i-2; {ii - младшее число пары}
      k1:=0; {поиск количества делителей старшего числа}
      for d2:=1 to ii do
        if (ii mod d2)=0 then inc(k1);
      if (k=2) and (k1=2) then f:=true; {если в обоих случаях количество делителей равно 2, то пара чисел - близнецы}
    end;
writeln('a=',a)
end.

 

 

 

 

Начало    Планирование    Ссылки    Карта сайта           
Copyright ©2011 Nika A.S.
Hosted by uCoz