Другие языки программирования и технологии

Помогите пожалуйста! Задача по программированию. ВВОдится 1 число n. ВОзможны 2 действия над ним : 1)вычесть 1

2)умножить на 2.
Нужно за мин. кол. действий получить 1000 и вывести это мин кол (то есть число).
Если не сложно, задачу на с++ пож!!
Благадарю за помощь!!!!
Несколько прямолинейно и на C#:

class Program
{
public static int DepthLocated = int.MaxValue;

static int Min1000(int a, bool Multiply, int Depth, string Seq)
{

if (a == 0 || Depth >= DepthLocated)
return int.MaxValue;

if (a > 1000)
return Depth + a - 1000;

if (a == 1000)
{
Console.WriteLine(Seq + "=1000");
DepthLocated = Depth;
return Depth;
}

if (Multiply)
{
a <<= 1;
Seq = "(" + Seq + ")*2";
}
else
{
a--;
Seq = Seq + "-1";
}

return Math.Min(Min1000(a, true, Depth + 1, Seq), Min1000(a, false, Depth + 1, Seq));

}

static void Main(string[] args)
{
int a = Convert.ToInt32(Console.ReadLine());
int k = Math.Min(Min1000(a, true, 0, a.ToString()), Min1000(a, false, 0, a.ToString()));
Console.WriteLine("Minimum completion took {0} step(s).", k);
Console.ReadKey();
}
}

Переделай на плюсы, синтаксис очень похож. Можешь убрать вывод выражений на экран, чтобы не трахаццо на плюсах со строками. Пример работы:
Витя Новиков
Витя Новиков
55 474
Лучший ответ
Может 8 раз умножить на 2 - получится 256.
отнять 6 раз по 1 - получится 250.
2 раза умножить на 2 - получится 1000.
Прямолинейно, но коротко и на плюсах:

#include <iostream>
#include <map>
#include <limits>

unsigned long minSteps(unsigned n, unsigned low){
if(n == low) return 0;
if(n < low) return std::numeric_limits<unsigned>::max();
static std::map<unsigned, std::map<unsigned, unsigned long>> mem;

if(mem[low].find(n) == mem[low].end()){
if(n % 2) mem[low][n] = 1 + minSteps(n - 1, low);
else mem[low][n] = std::min(1 + minSteps(n / 2, low), 1 + minSteps(n - 1, low));
}

return mem[low][n];
}

int main(){
int N;
std::cin >> N;
std::cout << minSteps(1000, N) << std::endl;
return 0;
}

UPD: Решение не верное, ибо я не правильно поняла условие. Оно ищет для условий, если к числу можно прибавить 1 или умножить на 2.
Попытайся переделать как тебе надо.
РЩ
Роман Щукин
11 157
Витя Новиков Идея создавать аж целый map на каждом шаге рекурсии выглядит несколько спорной, но в целом очень круто, конечно.

Похожие вопросы