2)умножить на 2.
Нужно за мин. кол. действий получить 1000 и вывести это мин кол (то есть число).
Если не сложно, задачу на с++ пож!!
Благадарю за помощь!!!!
Другие языки программирования и технологии
Помогите пожалуйста! Задача по программированию. ВВОдится 1 число n. ВОзможны 2 действия над ним : 1)вычесть 1
Несколько прямолинейно и на 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();
}
}
Переделай на плюсы, синтаксис очень похож. Можешь убрать вывод выражений на экран, чтобы не трахаццо на плюсах со строками. Пример работы:

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();
}
}
Переделай на плюсы, синтаксис очень похож. Можешь убрать вывод выражений на экран, чтобы не трахаццо на плюсах со строками. Пример работы:

Может 8 раз умножить на 2 - получится 256.
отнять 6 раз по 1 - получится 250.
2 раза умножить на 2 - получится 1000.
отнять 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.
Попытайся переделать как тебе надо.
#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.
Попытайся переделать как тебе надо.
Витя Новиков
Идея создавать аж целый map на каждом шаге рекурсии выглядит несколько спорной, но в целом очень круто, конечно.
Похожие вопросы
- Помогите решить задачу по программированию. Дано четырёхзначное число. Найти: а) сумму его цифр; б) произведение его циф
- Вычислить произведение n>=2 (n четное) сомножителей y=(2/1)*(2/3)*(4/3)*(4/5)*(6/5)*(6/7)*..
- Помогите решить задачу на программирование!
- Помогите написать программу Дано натуральное число n. Вычислить сумму всех k(k+1), k меняется от 1 до n.
- Помогите написать программу. Дано натуральное 5-значное число n.Определить равны ли сумма и произведение его цифр.
- Помогите решить) Задачи по программированию в Паскале
- Помогите решить задачу по программированию, пожалуйста. Найти сумму наименьших значений элементов строк. (вложенные циклы)
- помогите решить задачу по программированию
- Решить задачу по программированию Подсчитать количество нулевых элементов для таблиц А [1..4,1..6], B[1..4,1..8]
- Помогите решить задачи по программированию!!!