Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.05.2011, 11:38   #1
Dashka13
 
Регистрация: 20.05.2011
Сообщений: 5
По умолчанию Разложение натурального числа с++

Помогите,пожалуйста, написать программу
задание:написать программу,реализующую жадный алгоритм(минимизация числа слагаемых) для разложения натурального числа в сумму
а)степеней двойки
б)четных степеней двойки
на вход подпется число,на выходе слагаемые в убывающем порядке.
Пример: число 11, на выходе для а) 8 2 1
б) 4 4 1 1 1
вот мой код, но тут ничего не получается

PHP код:
#include <iostream>
#include <conio.h>
#define N 30
#define K 30
using namespace std;

int main(void)
{
    
int i,j,k,chislo,M[N],L[K];
    
k=1;
    for (
i=0;i<N;i++)
        
M[i]=k=k*2;
    for (
i=0;i<N;i++)
        
cout<<M[i]<<endl;
    
cin>>chislo;
     while (
chislo!=0)
     {for (
i=j=0;i<N;i++,j++)
       if (
M[i]>chislo)
       
M[i-1]=L[j];
       
chislo=chislo-M[i];
     }
     while (
L[j]!=0)
         
cout<<L[j]<<endl;
       
getch();

Dashka13 вне форума Ответить с цитированием
Старый 20.05.2011, 12:13   #2
Mandrivnyk
Software Developer
Участник клуба
 
Аватар для Mandrivnyk
 
Регистрация: 01.03.2011
Сообщений: 1,098
По умолчанию

Ну, первая часть задачи, если не ошибаюсь, сводится к переводу числа в двоичную систему счисления и выводу соответствующих степеней двойки на позиции единиц в полученном двоичном числе.
Не будет ли это более громоздко -- вот в чем вопрос -)
Болтовня ничего не стоит. Покажите мне код. (c) Linus Torvalds
Помог ответ? -- Поставьте отзыв.
Выражения особой благодарности в рублевом эквиваленте отправлять сюда --> R269634919062
Mandrivnyk вне форума Ответить с цитированием
Старый 20.05.2011, 12:25   #3
KobolD
Форумчанин
 
Регистрация: 10.06.2010
Сообщений: 239
По умолчанию

Вот код на C#. Впринципе чтобы на С++ перевести надо заменить функции ввода вывода в консоль и вычисления степени.
Код:
        static void Main(string[] args)
        {
            Console.WriteLine("Enter Value");
            int Vxod = Convert.ToInt32(Console.ReadLine());
            int stepen = 0;
            int step = 1;//Задаем шаг увеличения степени двойки (step = 1 для первого варианта а, step = 2 для б) 
            while (Math.Pow(2, stepen) != Vxod)
            {
                 if (Math.Pow(2, stepen) > Vxod)
                {
                    Console.Write(Math.Pow(2, stepen - step).ToString() + "+");
                    Vxod -= (int)Math.Pow(2, stepen - step);
                    stepen = 0;
                }
                else
                    stepen += step;
            }
            Console.WriteLine(Vxod.ToString());
            Console.ReadLine();
        }
Чтобы слова не расходились с делом, нужно молчать и ничего не делать.

Последний раз редактировалось KobolD; 20.05.2011 в 12:43.
KobolD вне форума Ответить с цитированием
Старый 20.05.2011, 13:09   #4
Dashka13
 
Регистрация: 20.05.2011
Сообщений: 5
По умолчанию

Цитата:
Сообщение от Mandrivnyk Посмотреть сообщение
Ну, первая часть задачи, если не ошибаюсь, сводится к переводу числа в двоичную систему счисления и выводу соответствующих степеней двойки на позиции единиц в полученном двоичном числе.
Не будет ли это более громоздко -- вот в чем вопрос -)
да, все првильно,я просто не знаю как по другому это все организовать)

Последний раз редактировалось Dashka13; 20.05.2011 в 13:11.
Dashka13 вне форума Ответить с цитированием
Старый 20.05.2011, 13:10   #5
Dashka13
 
Регистрация: 20.05.2011
Сообщений: 5
По умолчанию

KobolD,а можно,пожалуйста, перевести код на С++,просто я вообще не знаю С#...
Dashka13 вне форума Ответить с цитированием
Старый 20.05.2011, 13:37   #6
KobolD
Форумчанин
 
Регистрация: 10.06.2010
Сообщений: 239
По умолчанию

Среды разработки у меня нет так, что код будет не проверенный.
Код:
       #include <math.h>
       #include <iostream> 
        #include <conio.h>

        int Main()
        {
            cout<<"Enter Value"<<endl;
            int Vxod;
            cin>>Vxod;
            int stepen = 0;
            int step = 1;
            while (pow(2, stepen) != Vxod)
                 if (pow(2, stepen) > Vxod)
                {
                    cout<<pow(2, stepen - step) << "+";
                    Vxod -= pow(2, stepen - step);
                    stepen = 0;
                }
                else
                    stepen += step;
            cout<<Vxod<<endl;;
            getch();
        }
Чтобы слова не расходились с делом, нужно молчать и ничего не делать.
KobolD вне форума Ответить с цитированием
Старый 20.05.2011, 13:59   #7
Dashka13
 
Регистрация: 20.05.2011
Сообщений: 5
По умолчанию

Цитата:
Сообщение от KobolD Посмотреть сообщение
Среды разработки у меня нет так, что код будет не проверенный.
Код:
       #include <math.h>
       #include <iostream> 
        #include <conio.h>

        int Main()
        {
            cout<<"Enter Value"<<endl;
            int Vxod;
            cin>>Vxod;
            int stepen = 0;
            int step = 1;
            while (pow(2, stepen) != Vxod)
                 if (pow(2, stepen) > Vxod)
                {
                    cout<<pow(2, stepen - step) << "+";
                    Vxod -= pow(2, stepen - step);
                    stepen = 0;
                }
                else
                    stepen += step;
            cout<<Vxod<<endl;;
            getch();
        }
выдает ошибку: существует более одного экземпляра перегруженная функция "pow", соответствующего списку аргументов:

Последний раз редактировалось Dashka13; 20.05.2011 в 14:38.
Dashka13 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
разложение натурального числа DarkMage Помощь студентам 1 31.03.2011 17:38
Количетсво цифр натурального числа Джиган Помощь студентам 3 13.03.2011 08:52
Разбиение натурального числа на 3 слагаемых Neitrosha Помощь студентам 13 27.10.2010 18:45
Разложение натурального числа на простые множители (Delphi) giga_person Помощь студентам 3 17.03.2010 16:24
вывод на экран наибольшего делителя натурального числа N, меньше заданного натурального M Fatality Помощь студентам 2 03.12.2008 23:27