Четверг, 09.01.2025
Pascal 4 All
[ · Новые сообщения · Участники · Правила форума · Поиск · RSS ]

 

  • Страница 1 из 1
  • 1
Модератор форума: Seqular, Pavel  

Задача для начинаючих!
RomanДата: Суббота, 02.02.2008, 04:36 | Сообщение # 1
Новичок
Группа: Пользователи
Сообщений: 7
Репутация: 0
Замечания: 0%
Статус: Offline
Васе Г приснился сон,что ему нужно решыть задачу.Над натуральным числом N можно выполнять такие операции: 1. Если число N делится на 3, то делить его на 3. 2. Если число N делится на 2, то делить его на 2.
3. Отнимать 1. По заданному N надо найти наименьшее количество операций для того, чтобы в результате получить 1.
Формат входных данных:Входной файл содержыт число N(N<=10^6).
Формат выходных данных:Выходной файл содержыт найменшое количество операцый.
Пример входных и выходных данных:
input.txt
5
output.txt
3
 
SeqularДата: Суббота, 02.02.2008, 08:09 | Сообщение # 2
Хранитель
Группа: Администраторы
Сообщений: 859
Репутация: 35
Статус: Offline
Вот примерное решение. Сделал отладочный вывод на экран, чтобы можно было проследить за правильностью. Погляди, кажется должно удовлетворять всем условиям.
Code
Program Iteracy;
Uses CRT;
Const infile = 'input.txt';
       outfile = 'output.txt';
Var n: LongInt;
     i: Integer;
     f: text;
Begin
ClrScr;
Assign(f, infile);
ReSet(f);
Readln(f, n);
Close(f);
i := 0;
While (n <> 1) do
       Begin
       If (n mod 3 = 0) then Begin
                             Inc(i);
                             Write(i,'. ',n,' / 3 = ');
                             n := n div 3;
                             Writeln(n);
                             End
Else
       If (n mod 2 = 0) then Begin
                             Inc(i);
                             Write(i,'. ',n,' / 2 = ');
                             n := n div 2;
                             Writeln(n);
                             End
Else  Begin
       Inc(i);
       Write(i,'. ',n,' - 1 = ');
       n := n - 1;
       Writeln(n);
       End;
       End;
Writeln(#13#10,'Итого: ',i,' операций');
Assign(f, outfile);
ReWrite(f);
Writeln(f,i);
Close(f);
Readkey;
End.

P.S. Проверку на <100000 не делал, можешь сделать сам.


Поддерживаю также проект сообщество молодых сисадминов
 
RomanДата: Четверг, 07.02.2008, 01:05 | Сообщение # 3
Новичок
Группа: Пользователи
Сообщений: 7
Репутация: 0
Замечания: 0%
Статус: Offline
Seqular ето не зовсем правильное решение например в сделаной вами задачи когда ми ведем 10 нам ваша програма
будет делать такие операцые:1)10/2=5,
2)5-1=4,
3)4/2=2,
4)2/2=1 ето не правильно нужно так:1)10-1=9,
2)9/3=3,
3)3/2=1,и должно вывести 3,а у вас 4.Пожалуйста сделайте правильно!Заранее спасибо!

Добавлено (06.02.2008, 18:05)
---------------------------------------------
Перепутал третья операцыя 3)3/3=1.

 
SeqularДата: Пятница, 08.02.2008, 23:01 | Сообщение # 4
Хранитель
Группа: Администраторы
Сообщений: 859
Репутация: 35
Статус: Offline
Roman, виноват, действительно, решение идет не по тому пути... Я так понимаю, эта проблема возникать будет на числах, кратных 10-ти? Или не совсем? Давай решим вместе, но нужно будет обдумать наиболее оптимальный алгоритм

Поддерживаю также проект сообщество молодых сисадминов
 
RomanДата: Суббота, 09.02.2008, 00:37 | Сообщение # 5
Новичок
Группа: Пользователи
Сообщений: 7
Репутация: 0
Замечания: 0%
Статус: Offline
Спасибо но я ету задачу уже решил! biggrin
 
  • Страница 1 из 1
  • 1
Поиск:

Copyright MyCorp © 2025
Используются технологии uCoz
javascript:;" rel="nofollow" onclick="loginPopupForm(); return false;