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

algorithm: find_if - C++

Восстановить пароль Регистрация
 
KingR
-6 / 6 / 1
Регистрация: 23.05.2010
Сообщений: 133
13.12.2010, 17:00     algorithm: find_if #1
В етой задачке должно виводить симетрическии числа но не делает етого Почему подскажите
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
44
45
46
47
48
49
#include<iostream>
#include<algorithm>
#include<list>
using namespace std;
 
bool sumet(int x)
{
    int ost;
    int k=int(log10((double)x))+1;
    int* t=new int[k];
    for(int i=0;i<k;i++)
    {
        ost=x%10;
        x=x/10;
        t[i]=ost;
    }
    for(int i=0;i<k/2;i++)
        if(t[i]!=t[k-i-1])
        {
            return false;
        }
    return true;
}
void main()
{
    
    list<int> a;
    list<int>::iterator it;
    int n,x;
    cin>>n;
    for(int i=0;i<n;i++)
    {
        cin>>x;
        a.push_back(x);
    }
    it=find_if(a.end(),a.end(),sumet);
    while(it!=a.end())
    {
        a.resize(n+1);
        it=a.insert(++it,0);
        it=find_if(it,a.end(),sumet);
    }
    it=a.begin();
    while(it!=a.end())
    {
        cout<<*it<<" ";
        it++;
    }
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.12.2010, 17:00     algorithm: find_if
Посмотрите здесь:

C++ stl find_if msvs6.0
C++ find_if, нужна помощь
C++ Можно ли применить find_if к вектору
Передача параметра предикату в find_if C++
C++ Error in std::find_if
C++ Ошибка. Алгоритм find_if()
C++ Как использовать std::find_if?
Find_if C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Mr.X
Эксперт С++
 Аватар для Mr.X
2803 / 1579 / 247
Регистрация: 03.05.2010
Сообщений: 3,669
14.12.2010, 03:45     algorithm: find_if #2
Не очень понял что такое "симетрическии числа", но если имелись в виду симметричные, то вот так можно:

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
//////////////////////////////////////////////////////////////////////////////////////
#include <algorithm>
#include <iostream>
#include <sstream>
#include <string>
//////////////////////////////////////////////////////////////////////////////////////
typedef std::string  T_str;
//////////////////////////////////////////////////////////////////////////////////////
bool  is_symmetric_num(const int  n)
{
    std::ostringstream  sout;  
    sout << n;
    T_str  s(sout.str());
    return std::equal(s.begin(), s.end(), s.rbegin());
}
//////////////////////////////////////////////////////////////////////////////////////
int main()
{    
    const int N_MIN = 0;
    std::cout << "n_max = ";
    int n_max = 0;
    std::cin >> n_max;
    std::cout << "The symmetric numbers from a segment ["
              << N_MIN
              << ", "
              << n_max
              << "]:"
              << std::endl;
 
    for(int i = N_MIN; i <= n_max; ++i)
    {
        if(is_symmetric_num(i))
        {
            std::cout << i                      
                      << '\t';
        }
    }
    std::cout << std::endl;
}
KingR
-6 / 6 / 1
Регистрация: 23.05.2010
Сообщений: 133
14.12.2010, 19:56  [ТС]     algorithm: find_if #3
Цитата Сообщение от Mr.X Посмотреть сообщение
Не очень понял что такое "симетрическии числа", но если имелись в виду симметричные, то вот так можно:

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
//////////////////////////////////////////////////////////////////////////////////////
#include <algorithm>
#include <iostream>
#include <sstream>
#include <string>
//////////////////////////////////////////////////////////////////////////////////////
typedef std::string  T_str;
//////////////////////////////////////////////////////////////////////////////////////
bool  is_symmetric_num(const int  n)
{
    std::ostringstream  sout;  
    sout << n;
    T_str  s(sout.str());
    return std::equal(s.begin(), s.end(), s.rbegin());
}
//////////////////////////////////////////////////////////////////////////////////////
int main()
{    
    const int N_MIN = 0;
    std::cout << "n_max = ";
    int n_max = 0;
    std::cin >> n_max;
    std::cout << "The symmetric numbers from a segment ["
              << N_MIN
              << ", "
              << n_max
              << "]:"
              << std::endl;
 
    for(int i = N_MIN; i <= n_max; ++i)
    {
        if(is_symmetric_num(i))
        {
            std::cout << i                      
                      << '\t';
        }
    }
    std::cout << std::endl;
}
упс симетрическии .... но мне нужно имено сделать ету задачу при помоще алгоритма файнд_иф
и там не то штоб вивести симетрическии числа а вставить после них 0 а потом уже вивести список етот
как я понял там проблема с размером листа
Yandex
Объявления
14.12.2010, 19:56     algorithm: find_if
Ответ Создать тему
Опции темы

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