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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 25.11.2009, 14:42   #1
Veina
Пользователь
 
Регистрация: 28.10.2009
Сообщений: 34
По умолчанию Помогите с задачей на массивы в С++

Найти в массиве натуральных чисел все группы элементов, имеющих одинаковую сумму цифр. Массив вводится пользователем с клавы через пробелы. Всё, у меня уже каша в голове по этой задаче. Помогите, пожалуйста...
Veina вне форума Ответить с цитированием
Старый 25.11.2009, 15:02   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Всё, у меня уже каша в голове по этой задаче.
Топор в кашу добавь
Показывай наработки - поправим.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 27.11.2009, 19:17   #3
Veina
Пользователь
 
Регистрация: 28.10.2009
Сообщений: 34
По умолчанию

Код:
#include <iostream>
#include <iterator>
#include <vector>
using namespace std;
typedef vector<int> TIntArray;

TIntArray &InputData (TIntArray &theArray)
{
   cout << "Input integer data ('0' for exit)" << endl;
   int d;
   do
   {
      cin >> d;
      if (d)
         theArray.push_back(d);
   }
   while (d);
   return theArray;
}

void PrintGroup (TIntArray theArray)
{
   typedef TIntArray::iterator TIntIterator;
   for (TIntIterator i= theArray.begin(); i != theArray.end()-1; ++i)
   {
      int baseSumm= 0;
      for (TIntIterator j= i; j != theArray.end()-1; ++j)
      {
         baseSumm+= *j;
         for (TIntIterator g= j+1; g != theArray.end(); ++g)
         {
            int currSumm= 0;
            for (TIntIterator k= g; k != theArray.end(); ++k)
            {
               currSumm+= *k;
               if (baseSumm <  currSumm)
                  break;
               else if (baseSumm == currSumm)
               {
                  copy(i, j+1, ostream_iterator<int>(cout, " "));
                  cout << "AND ";
                  copy(g, k+1, ostream_iterator<int>(cout, " "));
                  cout << endl;
               }
            }
         }
      }
   }
}
//----------------------------------------------//
int main (int argc, char **argv)
{
   TIntArray array;
   InputData(array);
   PrintGroup(array);
   return 0;
}
Veina вне форума Ответить с цитированием
Старый 27.11.2009, 20:49   #4
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Вот, вроде работает ) Дабы избежать повторов чисел при выводе я завёл ещё один массив булевых значений, в котором помечаю каждую ячейку массива чисел как "использованная" или "не использованная".
Код:
#include <iostream>
#include <vector>

typedef std::vector<int> TIntArray;

TIntArray& InputData(TIntArray& theArray)
{
	std::cout << "Input ineger data('0' for exit)" << std::endl;
	
	int d;
	do {
		std::cin >> d;
		if(d > 0)
			theArray.push_back(d);
	} while( d );

	return theArray;
}

int SumOfDigits(int Number)
{
	int s = 0;

	while(Number > 0) {
		s += Number % 10;
		Number /= 10;
	}

	return s;
}

void PrintGroup(TIntArray theArray)
{
	typedef TIntArray::iterator  TIntIterator;
	typedef std::vector<bool>    TBoolArray;
	typedef TBoolArray::iterator TBoolIterator;

	TBoolArray    unused(theArray.size(), true);
	TBoolIterator tb_iter  = unused.begin();

	for(TIntIterator iter = theArray.begin(); iter != theArray.end(); ++iter, ++tb_iter) {
		int digs = SumOfDigits(*iter);

		TBoolIterator b_iter = tb_iter;
		for(TIntIterator jiter = iter; jiter != theArray.end(); ++jiter, ++b_iter) {
			if(digs == SumOfDigits(*jiter) && *b_iter) {
				std::cout << *jiter << ' ';
				*b_iter = false;
			}
		}

		std::cout << std::endl;
	}

	return;
}

int main()
{
	TIntArray theArray;
	InputData(theArray);
	PrintGroup(theArray);

	return 0;
}
netrino вне форума Ответить с цитированием
Старый 29.11.2009, 11:32   #5
Veina
Пользователь
 
Регистрация: 28.10.2009
Сообщений: 34
По умолчанию

всё, спасибо. работает

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


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
помогите плз с задачей на массивы sp.caster Помощь студентам 6 04.02.2009 20:10
Помогите с задачей Серафимий Долговяз Помощь студентам 1 31.01.2009 19:18
помогите с задачей на 2хмерные массивы eHappy Паскаль, Turbo Pascal, PascalABC.NET 0 14.12.2008 11:27
помогите с задачей StakanpORTvejna Паскаль, Turbo Pascal, PascalABC.NET 1 11.10.2008 19:19