Форум программистов, компьютерный форум CyberForum.ru

Непонятный Stack Overflow - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Строки. Замена слова в строке на заданное слово http://www.cyberforum.ru/cpp-beginners/thread850478.html
Задача, ввожу слова в строку потом ввожу слово которое нужно заменить и слово на которое нужно заменить. Т.к с функциями строк плохо знаком моя идея такова если ето возможно.. Я разбиваю строку на слова и в масив строк в каждую ячейку добавляю слово. Введеное слово сравниваю с словом в ячейке и если совпадает заменяю и в конце вывожу свой масив строк) подскажите как лучше сделать и если моя...
C++ Не могу разобраться с шаблонным классом Привет. Не могу разобраться в нижеизложенной ситуации. Вопрос: почему такая конструкция не работает, и как заставить её работать?template <typename T> struct A { T * a; A( unsigned size ) : a( new T ) {} }; class B { A <char> a; B() {} }; http://www.cyberforum.ru/cpp-beginners/thread850468.html
C++ Сортировка методом пузырька
массив я задал, а вот сортировку не могу сделать(( #include "stdafx.h" #include <iostream> #include <ctime> #include <cstdlib> #include <iomanip> int main() { const int a=100, b=100;
Хеш таблицы C++
Начал изучать хеш таблицы. Подскажите насчёт хеш таблиц с открытимы адрессами: - Должны ли мы инициализировать значение ключа таблицы если позиция таблицы никогда не использовалась? - Можем ли мы хранить 2 различные записи, которые имеют одно значение ключа?
C++ Поиск в ширину на графе http://www.cyberforum.ru/cpp-beginners/thread850430.html
#include "stdafx.h" #include "stdafx.h" #include <iostream> #include <conio.h> #include<vector> #include<queue> using namespace std; int main() { vector < vector<int> > g; // граф
C++ Вставка элемента в вектор Задача вставить новый элемент после все элементов, кратных своему номеру. Когда дело доходит до функции insert() , выскакивает ошибка "Vector iterator not incrementable". Подскажите, что я делаю не так? #include <iostream> #include <algorithm> #include <vector> using namespace std; int main() { setlocale(0,""); vector <int> ivec; подробнее

Показать сообщение отдельно
ZaMaZaN4iK
Мой лучший друг-отладчик!
 Аватар для ZaMaZaN4iK
163 / 163 / 9
Регистрация: 24.06.2012
Сообщений: 662
Записей в блоге: 5
Завершенные тесты: 1
28.04.2013, 00:46     Непонятный Stack Overflow
Здравствуйте, уважаемые форумчане.Столкнулся с непонятной мне проблемой при решении одной лёгкой олимпидной задачи.

Вот условие задачи:
Задана последовательность, содержащая n целых чисел. Необходимо найти число, которое встречается в этой последовательности наибольшее количество раз, а если таких чисел несколько, то найти минимальное из них, и после этого переместить все такие числа в конец заданной последовательности. Порядок расположения остальных чисел должен остаться без изменения.

Например, последовательность 1, 2, 3, 2, 3, 1, 2 после преобразования должна превратиться в последовательность 1, 3, 3, 1, 2, 2, 2.

Требуется написать программу, которая решает данную задачу.
Входные данные

Первая строка входного файла INPUT.TXT содержит число n — количество чисел во входной последовательности (3 ≤ n ≤ 200000). Следующая строка содержит входную последовательность, состоящую из n целых чисел, не превышающих по модулю 109. Все числа в строке разделены пробелом.
Выходные данные

В выходной файл OUTPUT.TXT выводится последовательность чисел, которая получается в результате названного преобразования. Все числа в последовательности должны быть разделены пробелом.



вот код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#include <cstdio>
#include <iostream>
#include <algorithm>
 
 
using namespace std;
 
 
int main()
{
    //freopen("input.txt","r",stdin);
    //freopen("output.txt","w",stdout);
    long long digit,temp=1,count=1,i,n,arr[200000],vyvod[200000];
    scanf("%I64d",&n);
    for(i=0;i<n;++i)
    {
        scanf("%I64d",&arr[i]);
        vyvod[i]=arr[i];
    }
    sort(arr,arr+n);
    digit=arr[0];
    for(i=0;i<n-1;++i)
    {
        if(arr[i] == arr[i+1])
            ++temp;
        else
        {
            if(temp>count)
            {
                digit=arr[i];
                count=temp;
            }
            temp=1;
        }
    }
    for(i=0;i<n;++i)
        if(vyvod[i] != digit)
            printf("%I64d ",vyvod[i]);   
    for(i=0;i<count;++i)
        printf("%I64d ",digit);
    system("pause");
    return 0;
}
Так вот, решение простое вроде я придумал - вводим массив, дублируем его.Потом первый массив сортируем sort() из STL, потом ищем в отсортированном массиве минимальное число, которое встречается наибольшее число раз, и записываем в переменные, что это за число и сколько раз встречалось.Потом выводим сначала из исходного массива по порядку все числа кроме найденного, а потом уже выводим нужное кол-во раз найденное число.


Но вот в чём проблема - при запуске программы сразу же программа вылетает.Компилировал как g++, так и компилятором от MSVS 2010(забыл как он называется).Ошибка одна и та же - переполнение стека.Но где??? и оно идет в самом начале программы.Если размеры исходных массивов ставить не 200000, а допусти м 200, то ошибки нет.Но как размер массива влияет на стек?Первый раз с таким сталкиваюсь - я не думал, что массив сложно такого размера создать.

Прошу вас, помогите понять, в чём суть данной проблемы.

Заранее спасибо.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 01:38. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru