Задача1. IІ етапу Всеукраїнської учнівської олімпіади
з інформатики 2015-2016 н.р.
Задача 1. «Астролог» (20 балів)
Ім’я вхідного файлу: input.txt
Ім’я вихідного файлу: output.txt
Максимальний час роботи на одному тесті: 1с
Один з астрологів визначає
щасливі і нещасливі дні так: він виписує підряд число, номер місяця і рік. В
отриманому числі додає всі цифри, в новому отриманому числі знову додає всі
цифри і так далі, доки чергова сума цифр не стане однозначним числом. Це число
і характеризує щасливість дня.
Формат вхідного
файлу.
Дата вводиться в форматі ррррммдд.
Формат вихідного
файлу.
Виведіть рядок, який містить одне число, яке визначає
щасливість дати.
Приклади файлів
input.txt
|
output.txt
|
20000101
|
4
|
19990102
|
4
|
Дана
задача легко розв'язується з застосуванням функцій div, mod, але сума
восьми цифр може бути двоцифровим числом, що не перевищує 72(=8*9), отже
потрібно використати команди розгалуження. Так як сума двоцифрового числа також
може бути двоцифровим числом(наприклад, 1+9=10), то розгалуження слід
використати два рази:
program
Project1;
{$APPTYPE
CONSOLE}
uses
SysUtils;
var
f,g:text; a,b,c,d,e,k,l,m,s:integer;
begin
assign(f,'input.txt');
assign(g,'output.txt');
reset(f); rewrite(g);
read(f,a);
s:=0;
b:=a div 10000000;
a:=a mod 10000000;
c:=b div 1000000;
a:=a mod 1000000;
d:=a div 100000;
a:=a mod 100000;
e:=a div 10000;
a:=a mod 10000;
k:=a div 1000;
a:=a mod 1000;
l:=a div 100;
a:=a mod 100;
m:=a div 10;
a:=a mod 10;
s:=a+b+c+d+e+k+l+m;
if s>9 then begin
a:=s div 10;b:=s mod 10;s:=a+b
end;
if s>9 then begin
a:=s div 10;b:=s mod 10;s:=a+b
end;
write(g,s);
close(f);
close(g);
end.
Для
спрощення розв’язку задачі можна використати команди циклу, так як маємо
повторення команд для визначення цифр числа та перевірки значення їх суми:
program
astrolog;
{$APPTYPE
CONSOLE}
uses
SysUtils;
var
f,g:text; a,b,s,c:integer;
begin
assign(f,'input.txt');
assign(g,'output.txt');
reset(f); rewrite(g);
read(f,a);
while a>=10 do begin
s:=0; b:=a;
while b>0 do begin
c:=b mod 10;
b:=b div 10;
s:=s+c;
end;
a:=s; end;
write(g,s);
close(f);
close(g);
end.
Можна
також використати роботу з рядками:
program
astrolog;
{$APPTYPE
CONSOLE}
uses
SysUtils;
var
f,g:text; a,b,c,s,i:integer;r:string;
begin
assign(f,'input.txt');
assign(g,'output.txt');
reset(f); rewrite(g);
read(f,r);
s:=0;
for i:=1 to length(r)do begin
val(r[i],a,b);
s:=s+a end;
while s>9 do begin
b:=s div 10;
c:=s mod 10;
s:=b+c;
end;
write(g,s);
close(f);
close(g);
end.
Немає коментарів:
Дописати коментар