Воскресенье, 24 Ноября 2024, 08:29

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Задачи по Borland C++
RamilyanamanaДата: Пятница, 03 Октября 2014, 07:17 | Сообщение # 1
Биззи Джей Ужасный
Сейчас нет на сайте
Помогите решить две задачи по Borland C++:
1) Вводится одномерный массив из n-элементов. подсчитать сумму элементов этого массива, заключенных между максимальным и минимальным элементом. Предполагается, что все элементы массива различны. Максимальный и минимальный элементы в сумму не входят.
2)Имеются два числа: 3 и 5. Требуется представить некоторую сумму большую или равную восьми, состоящую из этих цифр.

Буду очень признателен, если еще и комментарии напишите. Заранее благодарю)



goldsphereДата: Пятница, 03 Октября 2014, 07:43 | Сообщение # 2
заслуженный участник
Сейчас нет на сайте
1)
Код

const int n = 10;
   int indexMax; //номер максимального элемента
   int indexMin; //минимального
   int max;
   int min;
   int sum = 0;
   int a[n];   
   for(int i=0;i<10;++i) //Заполняем массив
    cin>>a[i];
   max = a[0];
   min = a[0];
   for(int i=0;i<10;++i) //высчитываем номер максимального элемента
   {
    if(a[i] >= max)
    {
     max = a[i];
     indexMax = i;
    }
   }
   for(int i=0;i<10;++i) // минимального
   {
    if(a[i] <= min)
    {
     min = a[i];
     indexMin = i;
    }
   }
   if(indexMax < indexMin) // считаем сумму
   {
    for(int i=indexMax+1;i<indexMin;++i)
     sum+=a[i];
   }else
   {
    for(int i=indexMin+1;i<indexMax;++i)
     sum+=a[i];
   }
   cout<<sum;


FinderX - Android Аркада

Сообщение отредактировал goldsphere - Пятница, 03 Октября 2014, 07:45
RamilyanamanaДата: Пятница, 03 Октября 2014, 14:15 | Сообщение # 3
Биззи Джей Ужасный
Сейчас нет на сайте
ну хоть кто-нибудь, помогите со второй пожалуйста help help


karuyДата: Пятница, 03 Октября 2014, 14:25 | Сообщение # 4
заслуженный участник
Сейчас нет на сайте
Цитата Ramilyanamana ()
Требуется представить некоторую сумму большую или равную восьми, состоящую из этих цифр.

Условие какое - то мутное, приведи пример подобного случая.


Сообщение отредактировал karuy - Пятница, 03 Октября 2014, 15:01
RamilyanamanaДата: Пятница, 03 Октября 2014, 15:06 | Сообщение # 5
Биззи Джей Ужасный
Сейчас нет на сайте
ну к примеру если дано число 13, то программа должна вывести 5+5+3, ну и остальные варианты, если таковы имеются.

Добавлено (03.10.2014, 15:06)
---------------------------------------------
вообще задача звучала так: есть пяти- и трех-рублевые монеты. требуется представить некоторую сумму большую или равную восьми, состоящую из этих чисел.(ну то есть разменять число на монеты по три и пять рублей)



karuyДата: Пятница, 03 Октября 2014, 15:15 | Сообщение # 6
заслуженный участник
Сейчас нет на сайте
Вот теперь ясно, сейчас набросаю.
RamilyanamanaДата: Воскресенье, 05 Октября 2014, 15:28 | Сообщение # 7
Биззи Джей Ужасный
Сейчас нет на сайте
karuy, еще не придумал? sad
может еще кто знает?



karuyДата: Воскресенье, 05 Октября 2014, 18:09 | Сообщение # 8
заслуженный участник
Сейчас нет на сайте
Цитата Ramilyanamana ()
karuy, еще не придумал?

Был занят немного.

Результат:
Код
23 = 5*1 + 3*6
23 = 5*4 + 3*1
LertmindДата: Воскресенье, 05 Октября 2014, 19:12 | Сообщение # 9
заслуженный участник
Сейчас нет на сайте
karuy, она не выдаёт все результаты, например для 30 она не учтёт вариант 5*3 + 3*5. Ещё я бы убрал дублирование кода.

Добавлено (05.10.2014, 19:12)
---------------------------------------------
В общем случае можно использовать рекурсию/стек для разложения числа на все слагаемые. Здесь можно написать такой код:
Код
void PrintCombinations(const int a, const int b, const int y)
{
      for (int modulo = y; modulo >= 0; modulo -= a) {
          if (modulo % b == 0) {
              cout << a << "*" << (y - modulo) / a << " + " << b << "*" << modulo / b << endl;
          }
      }
}

Для PrintCombinations(5, 3, 300) выведет все:
Ещё если хочешь добавь проверку if (a + b > y) return;


Сообщение отредактировал Lertmind - Воскресенье, 05 Октября 2014, 19:36
RamilyanamanaДата: Понедельник, 06 Октября 2014, 08:43 | Сообщение # 10
Биззи Джей Ужасный
Сейчас нет на сайте
Lertmind, извините за глупый вопрос, но куда вставить этот код?


SaiteiДата: Понедельник, 06 Октября 2014, 12:22 | Сообщение # 11
старожил
Сейчас нет на сайте
Ramilyanamana, эм... Тебе дали готовую функцию. Просто вставь её описание и реализацию и тупо юзай
RamilyanamanaДата: Понедельник, 06 Октября 2014, 12:56 | Сообщение # 12
Биззи Джей Ужасный
Сейчас нет на сайте
Saitei, ох.. если б я знал о чем вы. Что вы имеете ввиду?


LertmindДата: Понедельник, 06 Октября 2014, 19:48 | Сообщение # 13
заслуженный участник
Сейчас нет на сайте
Если не разобрался:
Код
// Представление числа как сумма троек и пятёрок
#include <iostream>
using namespace std;
// Описание функции
void PrintCombinations(const int a, const int b, const int y);

int main()
{
       int a = 5;
       int b = 3;
       int number = 300;
          
       PrintCombinations(a, b, number);

       return 0;
}
// Реализация функции
void PrintCombinations(const int a, const int b, const int num)
{
       if (a + b > num)
           return;
       for (int modulo = num; modulo >= 0; modulo -= a) {
           if (modulo % b == 0) {
               cout << a << "*" << (num - modulo) / a << " + " << b << "*" << modulo / b << endl;
           }
       }
}


Сообщение отредактировал Lertmind - Понедельник, 06 Октября 2014, 19:50
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг