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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 15.05.2012, 20:07   #1
grib.oksanochka
Новичок
Джуниор
 
Регистрация: 18.04.2012
Сообщений: 2
Сообщение задача на множество

Помогите с задачей на множество.

Дана последовательность из N натуральных чисел. Написать программу, которая выводит в возрастающем порядке все цифры,которые входят хотя бы в одно число
grib.oksanochka вне форума Ответить с цитированием
Старый 15.05.2012, 20:26   #2
Петррр
Форумчанин
 
Аватар для Петррр
 
Регистрация: 02.09.2011
Сообщений: 336
По умолчанию

Код:
#include <iostream>
#include <set>
#include <iterator>
#include <vector>
#include <ctime>

void todigits(int num, std::insert_iterator< std::set<int> > it) {
	while ( num ) {
		*it++ = num % 10;
		num /= 10;
	}
}

int main() {
	srand(time(NULL));
	const size_t size = 15;
	std::vector<int> vec(size);
	for(int i = 0; i < size; i++)
		vec[i] = rand(); 
	std::copy(vec.begin(), vec.end(), std::ostream_iterator<int>(std::cout, " "));
	std::cout << std::endl << std::endl;
	std::set<int> st;
	for(int i = 0; i < size; i++)
		todigits(vec[i], std::inserter(st, st.end()));
	std::copy(st.begin(), st.end(), std::ostream_iterator<int>(std::cout, " "));
	std::cout << std::endl;
	system("pause");
	return 0;
}
Если ты не можешь найти то, ради чего стоит жить, лучше найти то, за что стоит умереть
Петррр вне форума Ответить с цитированием
Старый 15.05.2012, 20:29   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Рискну предполоджить такой алгоритм:
Код:
MODULE q;
IMPORT In, StdLog;
VAR i:INTEGER;
 n:SET;

PROCEDURE Parse(k:INTEGER);
VAR l:INTEGER;
BEGIN
 WHILE k>0 DO
  l:=k MOD 10;
  n:=n+{l};
  k:=k DIV 10;
 END;
END Parse;

PROCEDURE ok;
VAR i:INTEGER;
BEGIN
 FOR i:=0 TO 31 DO
  IF i IN n THEN StdLog.Int(i); END;
 END;

END ok;
PROCEDURE do*;
BEGIN StdLog.Clear;
 In.Open;
 In.Int(i);
 WHILE In.Done DO
  Parse(i);
  In.Int(i);
 END;
 ok;
END do;

END q.
ВВод 11 23 56 дает результат 1 2 3 5 6
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задача по теме множество *cash* Помощь студентам 0 20.12.2011 21:25
Задача на множество))) mozhik Паскаль, Turbo Pascal, PascalABC.NET 2 07.11.2011 00:25
задача на множество точек MariyaVo Паскаль, Turbo Pascal, PascalABC.NET 2 14.01.2009 21:59