Тупая задача
От: Vampire Россия  
Дата: 05.12.06 01:04
Оценка:
Что здесь не правильно ???

Что то туплю конкретно ((((((((((((\

#include <iostream>
#include <ios>
#include <vector>
#include <algorithm>
#include <functional>



using namespace std;

// [12/5/2006 Psyho] Тех задание
// Массив A
// Нийти наиболее повторяющиеся числа и вывести на экран

int main(void)
{
vector <int>::iterator Iter;
vector <int> mass_a;
vector <int, vector<int> > pos;
cout << " Заполнение массива ";

for (int x = 0, int i = 0; ;i++)
{
cout << "'\n Введите " << i << " элемент массива ";
cin >> x;
mass_a.push_back(x);
if (x == -1) break;
}
int x;
for (int j = 0; j < mass_a.size(); j++)
{
cout << count(mass_a.begin(), mass_a.end(), mass_a[j]);
}
return 0;
}

На count ошибку и гонит. Смотрю MSDN вроде все по честному.
В общем заклинило. (((((((((((((
Если долго мучиться что нибудь получится
Re: Тупая задача
От: remark Россия http://www.1024cores.net/
Дата: 05.12.06 01:56
Оценка: :)
Здравствуйте, Vampire, Вы писали:

V>Что то туплю конкретно ((((((((((((\

V>В общем заклинило. (((((((((((((

Это потому что 4 часа ночи — утром всё скомпилица


1024cores &mdash; all about multithreading, multicore, concurrency, parallelism, lock-free algorithms
Re: Тупая задача
От: dotidot Россия  
Дата: 05.12.06 02:19
Оценка:
Здравствуйте, Vampire, Вы писали:

V>Что здесь не правильно ???


V>Что то туплю конкретно ((((((((((((\

V> vector <int, vector<int> > pos;
1. vector<int> — не аллокатор.

V> cout << " Заполнение массива ";


V> for (int x = 0, int i = 0; ;i++)

ужос. два раза инт нельзя.

остальное не ошибки, но поспать явно надо

рабочий вариант, в смысле компилируемый и не падающий, логику работы не смотрел, пять утра всё таки


#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

int main(void)
{
    vector <int>::iterator Iter;
    vector <int> mass_a;
    cout << " Заполнение массива ";


    for (int x = 0,  i = 0; ;i++)
    {
        cout << "'\n Введите " << i << " элемент массива ";
        cin >> x;
        mass_a.push_back(x);
        if (x == -1) break;
    }

    for (size_t j = 0; j < mass_a.size(); j++)
    {
        cout <<  count(mass_a.begin(), mass_a.end(), mass_a[j]);
    }
    return 0;
}
Re[2]: Тупая задача
От: dotidot Россия  
Дата: 05.12.06 02:29
Оценка:
Здравствуйте, dotidot, Вы писали:

таки посмотрел слегка логику
хотя задание: "Нийти наиболее повторяющиеся числа и вывести на экран" несколько неформально звучит... особенно со смешной опечаткой Наверно надо что то похитрее приведенного автором кода сделать. ну отсортировать количество повторений или что похитрее... да и guard на вводе не "-1" делать, а букву, какую-нить.

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

int main()
{
    vector <int> mass_a;
    cout << " Заполнение массива ";

//тут наверно имелось ввиду, что -1 в вектор всё-таки не попадет, хотя бы, потому, что оно вообще не повторяется ;)
    for (int x = 0,  i = 0; ;i++)
    {
        cout << "\n Введите " << i << ". элемент массива: ";
        cin >> x;
        if (x == -1) break;
        mass_a.push_back(x);  
    }

    for (size_t j = 0; j < mass_a.size(); j++)    
        cout <<  count(mass_a.begin(), mass_a.end(), mass_a[j]);
}
Re[3]: Тупая задача
От: LaptevVV Россия  
Дата: 05.12.06 06:43
Оценка:
Здравствуйте, dotidot, Вы писали:

D>Здравствуйте, dotidot, Вы писали:


D>хотя задание: "Нийти наиболее повторяющиеся числа и вывести на экран" несколько неформально звучит... особенно со смешной опечаткой Наверно надо что то похитрее приведенного автором кода сделать. ну отсортировать количество повторений или что похитрее... да и guard на вводе не "-1" делать, а букву, какую-нить.


D>
D>    for (size_t j = 0; j < mass_a.size(); j++)    
D>        cout <<  count(mass_a.begin(), mass_a.end(), mass_a[j]);
D>}
D>


Дык такое не находит, а просто выводит... Причем, для одинаковых чисел одно и то же количество выведется несколько раз...
Наверное, нужно отсортировать, а потом самому в цикле посчитать...
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re[4]: Тупая задача
От: remark Россия http://www.1024cores.net/
Дата: 05.12.06 07:01
Оценка:
Здравствуйте, LaptevVV, Вы писали:

LVV>Дык такое не находит, а просто выводит... Причем, для одинаковых чисел одно и то же количество выведется несколько раз...

LVV>Наверное, нужно отсортировать, а потом самому в цикле посчитать...

Или сразу в map класть.

#include <algorithm>
#include <iostream>
#include <map>

using namespace std;

int main()
{
    map<int, int> mass_a;

    int i = 0;
    while (true)
    {
        cout << "Enter " << ++i << " element: ";
        int x = 0;
        cin >> x;
        if (-1 == x) break;
        ++mass_a[x];  
    }

    map<int, int>::const_iterator iter = mass_a.begin();
    for (; iter != mass_a.end(); ++iter)
        cout << iter->first << " - " << iter->second << endl;

    cout << endl;
}




1024cores &mdash; all about multithreading, multicore, concurrency, parallelism, lock-free algorithms
Re: Тупая задача
От: Кодт Россия  
Дата: 05.12.06 10:06
Оценка:
Здравствуйте, Vampire, Вы писали:

V>// Нийти наиболее повторяющиеся числа и вывести на экран


Как насчёт того, чтобы отсортировать?
С помощью map'ов это делается довольно просто.

#include <map>
#include <iostream>
#include <iterator>
#include <algorithm>
#include <functional>
using namespace std;

// чтобы не путаться между числами разной природы, обзовём их...
typedef long number_type;
typedef unsigned count_type;

typedef map<number_type, count_type> counters_map;
typedef multimap<count_type, number_type, greater<count_type> > ranks_map;

// адаптеры
void add_number(counters_map* m, number_type n)
{
    ++(*m)[n];
}

void add_rank(ranks_map* m, pair<number_type,count_type> nc)
{
    (*m).insert(make_pair(nc.second, nc.first));
}

void print_rank(ostream* ost, pair<count_type,number_type> cn)
{
    (*ost) << cn.second << " встретилось " << cn.first << " раз" << endl;
}

int main()
{
    // посчитаем вхождения каждого числа
    counters_map cm;
    for_each(istream_iterator<number_type>(cin), istream_iterator<number_type>(), bind1st(ptr_fun(add_number), &cm));
    
    // пересортируем в порядке убывания числа вхождений
    ranks_map rm;
    for_each(cm.begin(), cm.end(), bind1st(ptr_fun(add_rank), &rm));
    
    // и выведем
    for_each(rm.begin(), rm.end(), bind1st(ptr_fun(print_rank), &cout));
}
... << RSDN@Home 1.2.0 alpha rev. 655>>
Перекуём баги на фичи!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.