Консультация онлайн # 185491

Раздел: [неизвестная рассылка]
Автор вопроса: lamed (Академик)
Дата: 24.02.2012, 11:42 Консультация неактивна
Поступило ответов: 2
Уважаемые эксперты! Пожалуйста, помогите решить задачи из Задачника М. Э. Абрамяна , раздел While.

While2. Даны положительные числа A и B (A > B). На отрезке длины A размещено максимально возможное количество отрезков длины B (без наложений). Не используя операции умножения и деления, найти количество отрезков B, размещенных на отрезке A.

While3. Даны целые положительные числа N и K. Используя только операции сложения и вычитания, найти частное от деления нацело N на K, а также остаток от этого деления. n = a*k + b

While5. Дано целое число N (> 0), являющееся некоторой степенью числа 2: N = 2^K. Найти целое число K — показатель этой степени.

While30. Даны положительные числа A, B, C. На прямоугольнике размера A > B размещено максимально возможное количество квадратов со стороной C (без наложений). Найти количество квадратов, размещенных на прямоугольнике. Операции умножения и деления не использовать.

Спасибо.
Последнее редактирование 25.02.2012, 15:26 lamed (Академик)
Добавлена ссылка на задачник

Ответ # 1, Чирков Сергей Андреевич (Посетитель)

Здравствуйте, lamed! Ответ на Ваш вопрос. Code::Blocks/G++
Код
/*While5. Дано целое число N (> 0), являющееся некоторой степенью числа
2: N = 2^K. Найти целое число K — показатель этой степени.*/
#include <iostream>
using namespace std;
int main()
{
    int n;
    cin>>n;

    int x=1;
    int k=0;

    while (x<n)
    {
        ++k;
        x*=2;
    }
    cout << "2^"<<k<<"="<<n << endl;
    return 0;
}

c уважением!

Последнее редактирование 25.02.2012, 13:34 lamed (Академик)


Чирков Сергей Андреевич

Посетитель
24.02.2012, 11:43
4
Спасибо!

Ответ # 2, Timohin Anton (Посетитель)

Здравствуйте, lamed!
Код
/**-------------------Задание------------------
 * While2.
 * Даны положительные числа A и B (A > B).
 * На отрезке длины A размещено максимально возможное количество отрезков длины B (без наложений).
 * Не используя операции умножения и деления, найти количество отрезков B, размещенных на отрезке A.
-----------------------------------------------
*/
#include <iostream>
#include <cstdlib>
using namespace std;
int main()
{
    int a,b,x=0;
    system("chcp 1251 > nul");
    cout << "Введите a-";
    cin >> a;
    cout << "Введите b-";
    cin >> b;
    while (a>=b)
    {
    a-=b;
    x++;
    }
    cout << x << " количество отрезков длины B (без наложений)." ;
    return 0;
}

Последнее редактирование 25.02.2012, 13:19 lamed (Академик)


Timohin Anton

Посетитель
24.02.2012, 11:47
5
Спасибо, Антон!

Мини-форум консультации # 185491

lamed

Академик

ID: 320937

270985

= общий =    24.02.2012, 11:49
Добрый день! Ответ неверный. Укажите ошщибку и Выложите правильный ответ в мини-форум. Срок - до субботы.
lamed

Академик

ID: 320937

270987

= общий =    24.02.2012, 11:51
Добрый день! Ответ непонятный. Отредактируйте, пожалуйста, до субботы.
bignoob

270990

= общий =    24.02.2012, 11:57
Добрый День!
Код
/*While3. Даны целые положительные числа N и K. Используя только операции
сложения и вычитания, найти частное от деления нацело N на K, а также остаток
от этого деления.
n = a*k + b */
#include <iostream>
using namespace std;
int main()
{
    int n, k, a, b;
    cin>>n;
    cin>>k;
    b=n;
    a=0;
    while (b>=k)
    {
        b-=k;
        a++;
    }
    cout<<n<<"="<<a<<"*"<<k<<"+"<<b<<endl;
    return 0;
}

С Уважением, Андрей!
lamed

Академик

ID: 320937

270991

= общий =    24.02.2012, 11:58
Добрый день, Антон, используйте BBCode!
Чирков Сергей Андреевич

270992

= общий =    24.02.2012, 12:00
Исправил ошибку!!
Код
/*While5. Дано целое число N (> 0), являющееся некоторой степенью числа
2: N = 2^K. Найти целое число K — показатель этой степени.*/
#include <iostream>
using namespace std;
int main()
{
    int n;
    cin>>n;

    int x=2;
    int k=1;

    while (x<n)
    {
        ++k;
        x*=2;
    }
    cout << "2^"<<k<<"="<<n << endl;
    return 0;
}
lamed

Академик

ID: 320937

270994

= общий =    24.02.2012, 12:21
Сергей Андреевич, программа выдает
Код
2^1=1.
Ищите до субботы:)
Последнее редактирование 24.02.2012, 12:21 lamed (Академик)
Чирков Сергей Андреевич

271017

= общий =    24.02.2012, 15:25
Здравствуйте, lamed!! Переделал
Код
/*While5. Дано целое число N (> 0), являющееся некоторой степенью числа
2: N = 2^K. Найти целое число K — показатель этой степени.*/
#include <iostream>
using namespace std;
int main()
{
    int n;
    cin>>n;

    int x=2;
    int k=1;
if (n==1)
{
    k=0;
}
else
{
    while (x<n)
    {
        ++k;
        x*=2;
    }
}
    cout << "2^"<<k<<"="<<n << endl;
    return 0;
}


Последнее редактирование 24.02.2012, 22:32 lamed (Академик)
lamed

Академик

ID: 320937

271019

= общий =    24.02.2012, 15:35
Сергей Андреевич, можно обойтись без if.
Чирков Сергей Андреевич

271020

= общий =    24.02.2012, 15:38
Здравствуйте, lamed!! Переделал

Код
/*While5. Дано целое число N (> 0), являющееся некоторой степенью числа
2: N = 2^K. Найти целое число K — показатель этой степени.*/
#include <iostream>
using namespace std;
int main()
{
    int n;
    cin>>n;

    int x=2;
    int k=0; // Нашел ошибку

    while (x<n)
    {
        ++k;
        x*=2;
    }
    cout << "2^"<<k<<"="<<n << endl;
    return 0;
}
return 0;
}
Последнее редактирование 24.02.2012, 16:24 lamed (Академик)
lamed

Академик

ID: 320937

271025

= общий =    24.02.2012, 15:44
Сергей Андреевич! В пост вкралась ошибка, двойной return. Не компилируется.
Чирков Сергей Андреевич

271038

= общий =    24.02.2012, 17:28
Вроде теперь все окей!!!!
Код
/*While5. Дано целое число N (> 0), являющееся некоторой степенью числа
2: N = 2^K. Найти целое число K — показатель этой степени.*/
#include <iostream>
using namespace std;
int main()
{
    int n;
    cin>>n;

    int x=2;
    int k=0;

    while (x<n)
    {
        ++k;
        x*=2;
    }
    cout << "2^"<<k<<"="<<n << endl;
    return 0;
}
lamed

Академик

ID: 320937

271082

= общий =    24.02.2012, 22:27
Выдает 2^2=8. Опять не угадали :)
lamed

Академик

ID: 320937

271084

= общий =    24.02.2012, 22:33
А если все же введем a<b, выдает 1, а должна 0.
Timohin Anton

271087

= общий =    24.02.2012, 22:55
Код
/**-------------------Задание------------------
 * While2°.
 * Даны положительные числа A и B (A > B).
 * На отрезке длины A размещено максимально возможное количество отрезков длины B (без наложений).
 * Не используя операции умножения и деления, найти количество отрезков B, размещенных на отрезке A.
-----------------------------------------------
*/
#include <iostream>
#include <cstdlib>
using namespace std;
int main()
{
    int a,b,x=0;
    system("chcp 1251 > nul");
    cout << "a=";
    cin >> a;
    cout << "b=";
    cin >> b;
    while (a>b)
    {
    a-=b;
    x++;
    }
    cout << x << " количество отрезков длины B (без наложений)." ;

    return 0;
}

Нашел ошибку, исправил.
Последнее редактирование 24.02.2012, 22:56 [неизвестный]
lamed

Академик

ID: 320937

271098

= общий =    24.02.2012, 23:53
Антон, если введем a и b одинаковые, получим 0 smile
Чирков Сергей Андреевич

271111

= общий =    25.02.2012, 01:35
вроде так
Код
/*While5. Дано целое число N (> 0), являющееся некоторой степенью числа
2: N = 2^K. Найти целое число K — показатель этой степени.*/
#include <iostream>
using namespace std;
int main()
{
    int n;
    cin>>n;

    int x=2;
    int k=0;

    do
    {
        ++k;
        x*=2;
    }
    while (x<n+1);
    cout << n << "~2^"<< k << endl; // ~ Знак приблезитьлено
    return 0;
}

lamed

Академик

ID: 320937

271125

= общий =    25.02.2012, 09:17
Сергей, предлагаю эту задачу рассмотреть на занятиях.
Timohin Anton

271132

= общий =    25.02.2012, 12:22
Код
/**-------------------Задание------------------
 * While2°.
 * Даны положительные числа A и B (A > B).
 * На отрезке длины A размещено максимально возможное количество отрезков длины B (без наложений).
 * Не используя операции умножения и деления, найти количество отрезков B, размещенных на отрезке A.
-----------------------------------------------
*/
#include <iostream>
#include <cstdlib>
using namespace std;
int main()
{
    int a,b,x=0;
    system("chcp 1251 > nul");
    cout << "Введите a-";
    cin >> a;
    cout << "Введите b-";
    cin >> b;
    while (a>=b)
    {
    a-=b;
    x++;
    }
    cout << x << " количество отрезков длины B (без наложений)." ;

    return 0;
}

Исправил.
неизвестный

271133

= общий =    25.02.2012, 12:39
Код
/*--------------------------------------------------------------------Задание----------------------------------------------------------------------------
While30. Даны положительные числа A, B, C.
На прямоугольнике размера A > B размещено максимально возможное количество квадратов
со стороной C (без наложений). Найти количество квадратов, размещенных на прямоугольнике.
Операции умножения и деления не использовать.
Выполнил: Маслаков Алексей.
-------------------------------------------------------------------------------------------------------------------------------------------------------*/
#include <iostream>
#include <cstdlib>
using namespace std;
int main()
{
    int a,b,c,i,s,t;
    system ("chcp 1251>nul");
    cout<<"введите числа а, b, c - "<<endl;
    cin>>a>>b>>c;
    i=0;
    s=t=c;
    while (a>=t)
    {
        s=c;
        while (b>=s)
        {
            i++;
            s=s+c;
        }
        t=t+c;
    }
    cout<<"максимальное количество квадратов со стороной С на прямоугольнике со сторонами  А и В-"<<i<<endl;

    return 0;
}
Чирков Сергей Андреевич

271134

= общий =    25.02.2012, 12:39
Можно и на занятиях!!!
А array я неправильно переделал?
lamed

Академик

ID: 320937

271138

= общий =    25.02.2012, 13:22
Добрый день, Алексей Юрьевич! Скорей всего, Вы зарегистрировались позже, чем был задан вопрос, поэтому ответить не получилось. Сообщение в мини-форуме принимается.
lamed

Академик

ID: 320937

271140

= общий =    25.02.2012, 13:37
Наталья Дмитриевна, неясно, что делает программа. Пост удаляю, чтобы народ не пугать.
Возможность оставлять сообщения в мини-форумах консультаций доступна только после входа в систему.
Воспользуйтесь кнопкой входа вверху страницы, если Вы зарегистрированы или пройдите простую процедуру регистрации на Портале.