Завдання № 37. Перевірити, чи є натуральне число щасливим квитком » Pascal - основи програмування

Основи програмування на мові Pascal

 

Спонсори

Завдання № 37. Перевірити, чи є натуральне число щасливим квитком

Завдання № 37. Перевірити, чи є натуральне число щасливим квитком
Формулювання. Дано натуральне число n. Перевірити, чи є воно щасливим біле-те.
Примітка: взагалі, в математиці зазвичай розглядаються щасливі квитки з парною кількістю цифр, тому що у них можна явно виділити ліву і праву половини однаковий-виття довжини, суми цифр яких і порівнюються. Однак ми кілька розширимо це визначенні-ня, вважаючи, що якщо число має непарну довжину, його центральну цифру можна відкинути, так як її логічно було б додати до накопичується сума обох половин, що, власне, не змінить відносини між ними.
Наприклад, число 14350 - щасливий квиток, так як 1 + 4 = 5 + 0, а центральну цифру ми відкинули.
Рішення. Завдання є загальним випадком завдання 10. Для її вирішення необхідно знати дли-ну числа (тобто його розрядність), внаслідок чого нам необхідно скопіювати змінну n в деяку іншу (наприклад, a), щоб на основі a порахувати кількість десяткових розрядів n і зберегти його в деякої змінної digits (digits в пер. з англ. означає «цифри»). Зробити це можна так:

a: = n;
digits: = 0;
while a <> 0 do begin
  a: = a div 10;
  inc (digits)
end;

    Тут ми в кожній ітепретації циклу відкидаємо одну цифру від a і збільшуємо значення лічильника digits на 1. На деякому кроці число a буде однозначно і стане рівним нулю при ділені на 10, і після інпепретації лічильника, який тепер вже буде містити кількість цифр числа , відбудеться вихід з циклу.
    Щоб порахувати суми лівої і правої половини цифр числа (для накопичення яких ми передбачимо змінні left і right), ми повинні запустити два послідовних циклу від 1 до digits div 2, в яких додавати кожен отриманий розряд до відповідної змінної і відкидати його. Якщо довжина непарна, нам необхідно відкинути серединну цифру числа без додавання до якої-небудь сумі. Так як у першому циклі ми обробили і відкинули праве по-     Якщо довжина непарна, то по виході з нього серединна цифра якраз буде знаходитися в розряді одиниць. Тому необхідний наступний крок:
if odd (digits) then n: = n div 10;

   Нагадаємо, що функція odd (n) повертає значення true, якщо n непарне, і false, якщо n парне. Тобто, написаний вище оператор перевіряє лічильник digits (в якому зберігається довжина вихідного числа) на непарність, і якщо воно непарне, відкидає останню його цифру.
Далі необхідно накопичити суму чисел лівої половини числа і вивести на екран резуль-тат порівняння сум лівої і правої половини.

Код:


  1. program HappyTicket;
  2. var
  3. n, a: longint;
  4. left, right, digits, i: byte;
  5. begin
  6. readln(n);
  7. a := n;
  8. digits := 0;
  9. while a <> 0 do begin
  10. a := a div 10;
  11. inc(digits)
  12. end;
  13. left := 0;
  14. right := 0;
  15. for i := 1 to digits div 2 do begin
  16. right := right + n mod 10;
  17. n := n div 10
  18. end;
  19. if odd(digits) then n := n div 10;
  20. for i := 1 to digits div 2 do begin
  21. left := left + n mod 10;
  22. n := n div 10
  23. end;
  24. writeln(left = right)
  25. end.

0037.-HappyTicket.rar [768 b] (cкачувань: 7)

 

скачать dle 10.4фильмы бесплатно Наступна сторінка » Завдання № 38. Перевірити, чи є натурал... Попередня сторінка » Завдання № 36. Знайти найменший нетрил...