Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.67
Choopa
17 / 17 / 0
Регистрация: 03.04.2011
Сообщений: 89
#1

C++ мат. логика - C++

21.04.2011, 11:20. Просмотров 1141. Ответов 11
Метки нет (Все метки)

НАПИШИТЕ прогу pleas (желательно самый оптимальный вариант):
дани число n и а=1, а можно умножать на 2 и на 3.
Вопрос: как получить из а максимальное число, не превышающее n?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.04.2011, 11:20     C++ мат. логика
Посмотрите здесь:

Нечеткая логика - C++
Здравствуйте. Помогите пожалуйста с програмкой.

Логика программы - C++
Всем доброго времени суток! Помогите, пожалуйста, понять логику программы (код дан целиком) по теме связанные списки типа очередь. Код взят...

CTL логика - C++
Подскажите где искать литературу, у меня курсовая на тему : "Написать библиотеку классов функций реализующую CTL логику". Т.е. необходимо...

Логика выражения - C++
Изучать С начал недавно, изучение изучением, а вопрос текущий назрел и в литературе когда появится ответ, не особо известно) В общем...

Логика switch - C++
Программа должна расчитывать количество проданного товара, суть проблемы, кода вместо численных значений в вариантах case я использую...

Неверная логика аппы - C++
#include <iostream> using namespace std; int main() { char a; cin.getline(a, 10); int i; for (i = 0;a!='\0';i++)...

Логика использования typedef - C++
Всем привет! Постоянно в чужих кодах встречаю подобные конструкции: typedef enum _eOAuthHttpRequestType { eOAuthHttpInvalid =...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
mimicria
return (true);
1956 / 1093 / 91
Регистрация: 19.04.2011
Сообщений: 2,344
21.04.2011, 11:47     C++ мат. логика #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <vcl.h>
#include <iostream.h>
#pragma hdrstop
 
//---------------------------------------------------------------------------
 
#pragma argsused
int main(int argc, char* argv[])
{
 unsigned int n;
 cout << "n = ";
 cin >> n;
 unsigned int res1,res2;
 res1=(n%2);
 res2=(n%3);
 if (res1<res2) cout << "2 * " << n/2 << " = " << (n/2)*2;
 else cout << "3 * " << n/3 << " = " << (n/3)*3;
 return 0;
}
Overmind024
99 / 99 / 6
Регистрация: 10.09.2010
Сообщений: 267
21.04.2011, 11:56     C++ мат. логика #3
Интересная задача, попробую решить.
Choopa
17 / 17 / 0
Регистрация: 03.04.2011
Сообщений: 89
21.04.2011, 11:57  [ТС]     C++ мат. логика #4
Не Mimicria, не в том смысл пример:
10=1*3*3=9(max)
12=1*2*2*3=12(max)
Умножаем только на 2 или 3!!!
mimicria
return (true);
1956 / 1093 / 91
Регистрация: 19.04.2011
Сообщений: 2,344
21.04.2011, 11:58     C++ мат. логика #5
понял
Choopa
17 / 17 / 0
Регистрация: 03.04.2011
Сообщений: 89
21.04.2011, 12:01  [ТС]     C++ мат. логика #6
я примерно что то слышал в 2-х циклах находятся и сортируются значения поформуле pow(2,i)*pow(3,j)

Добавлено через 1 минуту
Цитата Сообщение от mimicria Посмотреть сообщение
А у меня что не так? Только на 2 и на 3 умножается. На единицу уж извините не умножаю, без толку это
у тебя в ответе пишит (для 10) 2*5,
а 5 это не 2 и не 3!
silent_1991
Эксперт С++
4958 / 3034 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
21.04.2011, 12:06     C++ мат. логика #7
mimicria, ну у вас же получается, что, например, для n = 49 результат 16 * 3. Так вот вам надо продолжать дробить 16, чтобы, скажем так, получить своеобразную факторизацию, состоящую только из 2 и 3.
mimicria
return (true);
1956 / 1093 / 91
Регистрация: 19.04.2011
Сообщений: 2,344
21.04.2011, 12:15     C++ мат. логика #8
Цитата Сообщение от silent_1991 Посмотреть сообщение
mimicria, ну у вас же получается, что, например, для n = 49 результат 16 * 3. Так вот вам надо продолжать дробить 16, чтобы, скажем так, получить своеобразную факторизацию, состоящую только из 2 и 3.
Это тоже неверно будет. Тут скорее всего надо перебирать все варианты pr= 2^i * 3^j пока pr <= N
silent_1991
Эксперт С++
4958 / 3034 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
21.04.2011, 12:21     C++ мат. логика #9
mimicria, да, я понимаю, что не выйдет, я имел ввиду, что на одной итерации останавливаться нельзя.
mimicria
return (true);
1956 / 1093 / 91
Регистрация: 19.04.2011
Сообщений: 2,344
21.04.2011, 12:24     C++ мат. логика #10
Пробуйте
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include <vcl.h>
#include <iostream.h>
#include <conio.h>
#include <math.h>
#pragma hdrstop
 
//---------------------------------------------------------------------------
 
#pragma argsused
int main(int argc, char* argv[])
{
 unsigned int n;
 cout << "n = ";
 cin >> n;
 unsigned int res1,res2=0;
 unsigned int i,j;
 for (i=0;i<n;i++)
 {
  for (j=0;j<n;j++)
  {
   res1=pow(2,i)*pow(3,j);
   if (res1<=n)
   {
    if (res1>res2)
    {
     res2=res1;
     cout << "2^" << i << " * 3^" << j << " = " << res2 << "\n";
    }
   }
  }
 }
 getch();
 return 0;
}
Выводятся все варианты, последний будет правильным
Mr.X
Эксперт С++
3042 / 1687 / 265
Регистрация: 03.05.2010
Сообщений: 3,867
21.04.2011, 14:35     C++ мат. логика #11
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
/////////////////////////////////////////////////////////////////////////////////////////
//даны число n и а=1, а можно умножать на 2 и на 3.
//Вопрос: как получить из а максимальное число, не превышающее n?
/////////////////////////////////////////////////////////////////////////////////////////
#include <cmath>
#include <iostream>
#include <limits>
/////////////////////////////////////////////////////////////////////////////////////////
typedef unsigned long long  T_num;
typedef int                 T_pow;
/////////////////////////////////////////////////////////////////////////////////////////
T_num  a(T_pow  pow_2, T_pow  pow_3)
{
    return  T_num(pow(2.0, pow_2) * pow(3.0, pow_3));
}
/////////////////////////////////////////////////////////////////////////////////////////
void  get_2_3_powers_max(T_num  n, T_pow&  pow_2_best, T_pow&  pow_3_best)
{
    T_pow  pow_2  = T_pow(log(double(n)) / log(2.0));
    T_pow  pow_3  = 0;
 
    pow_2_best  = pow_2;
    pow_3_best  = pow_3;
 
    T_num  a_cur  = a(pow_2, pow_3);
    T_num  a_max  = a_cur;
 
    while(pow_2)
    {
        --pow_2;
        ++pow_3;
        a_cur = a_cur / 2 * 3;
        if(a_cur > n)
        {
            --pow_3;
            a_cur /= 3;
        }
        if(a_cur > a_max)
        {
            a_max       = a_cur;
            pow_2_best  = pow_2;
            pow_3_best  = pow_3;
        }
    }
}
/////////////////////////////////////////////////////////////////////////////////////////
int main()
{
    std::locale::global(std::locale(""));
    T_num  N_MIN = 1;    
    T_num  N_MAX = 1000000000000000000;
    T_num  n = 0;
    do
    {
        std::cout << "n ("
                  << N_MIN
                  << ".." 
                  << N_MAX 
                  << "): ";
        
        std::cin >> n;
    }while(   n      < N_MIN
           || N_MAX  < n     );
    
    T_pow  pow_2_best = 0;
    T_pow  pow_3_best = 0;
    get_2_3_powers_max(n, pow_2_best, pow_3_best);
 
    std::cout << std::endl
              << "Лучшее приближение числа "
              << n
              << " снизу: "
              << std::endl
              <<"2^"
              << pow_2_best
              << " * 3^"
              << pow_3_best
              << " = "
              << a(pow_2_best, pow_3_best)
              << "."
              << std::endl;    
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.04.2011, 18:00     C++ мат. логика
Еще ссылки по теме:

Непонятная логика работы оператора new - C++
Нужно было освежить в памяти работу с оператором new. Использую Microsoft Visual Studio 2010 Express. Сделал простой пример, чтобы все...

недоработка С++ или ошибочная логика - C++
Помогите если возможно понять почему в моем коде нельзя проделать такую операцию: class First { int a; protected: ...

Логика для игры крестики нолики - C++
Здравствуйте. Есть программа крестики нолики. Не могу выполнить задание чтобы, вместо 2 игроков был один 1игрок против ПК. Не знаю как...

Нужна логика программы,общие понятия ,переменные - C++
Нужна программа учет оценок студентов на с++ Должно быть Окно в нем поля допустим: Реферат 90 баллов Контрольная 50 баллов Модуль...

Логика для игры, где ПК отгадывает загадочное мной число - C++
Доброго времени суток. В программировании я совсем новичок, не знаю ничего. Нужна Ваша помощь. Читаю книгу &quot;Изучение С++ через...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Choopa
17 / 17 / 0
Регистрация: 03.04.2011
Сообщений: 89
21.04.2011, 18:00  [ТС]     C++ мат. логика #12
ещё один из вариантов
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <iostream.h>
#include <math.h>
 
 int dodo(int n)
 { unsigned int res1,res2=0,i,j;
 i=0;
 do{
  j=0;
  do{
   res1=pow(2,i)*pow(3,j);
   if (res1<=n)
   {
    if (res1>res2)
    {
     res2=res1;
     if(res2==n)return res2;
    }
   }
  j++;
  }while(res1<n);
  i++ ;
 }while(pow(2,i)<=n);
 return res2 ;
 }
Yandex
Объявления
21.04.2011, 18:00     C++ мат. логика
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru