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

Степень симметрии - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 15, средняя оценка - 4.67
RockerSha
 Аватар для RockerSha
0 / 0 / 0
Регистрация: 05.10.2009
Сообщений: 22
30.11.2010, 09:59     Степень симметрии #1
Только прошу сделайте чем по проще. и через cin cout.

Степенью симметрии натурального числа назовём количество пар его десятичных цифр, в которых цифры совпадают и расположены симметрично относительно середины десятичной записи этого числа. Если некоторая цифра стоит посередине десятичной записи, её тоже нужно учитывать в паре с ней самой. Найти степень симметрии числа N.

Технические условия

Входные данные

В строке ввода содержится единственное натуральное число N (N < 2·109).

Выходные данные

Нужно вывести единственное число – степень симетрии числа N.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.11.2010, 09:59     Степень симметрии
Посмотрите здесь:

в двумерном массиве (NxN) произвести зеркальное отражение относительно вертикальной оси симметрии. C++
C++ степень
C++ Как возвести дробное число в целую степень? К примеру 2,7 возвести в степень 2 на C++.
Зеркально отразить элементы матрицы относительно горизонтальной оси симметрии матрицы C++
Содержимое матрицы размерности n x n повернуть на 90 по часовой стрелке вокруг центра симметрии матрицы. Исходная матрица вводится из файла C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
besstiaa
 Аватар для besstiaa
93 / 93 / 7
Регистрация: 04.06.2010
Сообщений: 223
30.11.2010, 13:08     Степень симметрии #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
#include <iostream>
 
int main()
{
    int N;
    std::cout << "N = ";
    std::cin >> N;
    int Size = 0, temp = N;
    
    while(temp != 0)
    {
        temp /= 10;
        Size++;            //кол-во цифр в числе
    }
    
    int *buf = new int [Size]; //массив цифр
    temp = N;
    int i = 0;
    while(temp != 0)
    {
        buf[i++] = temp % 10;
        temp /= 10;
    }
 
    int sim = 0;
    for(int i = 0; i < Size/2 + 1; i++)
        if(buf[i] == buf[Size - 1 - i])
            sim++;
 
    delete []buf;
    std::cout << sim << std::endl;
    system("Pause");
    return 0;
}
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9373 / 5423 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
30.11.2010, 13:34     Степень симметрии #3
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
#include <cmath>
 
int sym_level(int number){
    int lo, hi, cnt;
    
    for ( lo = 0, hi = (int)log10((double)number), cnt = 0; lo <= hi; ++lo, --hi )
        if ( ( (number / (int)pow(10.0, lo)) % 10 ) == ( (number / (int)pow(10.0, hi)) % 10 ) )
            ++cnt;
            
    return cnt;
}
 
int main(){
    int num;
    
    while ( std::cout << "Number: " && std::cin >> num && num > 0 )
        std::cout << "Symmetry level: " << sym_level(num) << std::endl;
    
    return 0;
}
Mr.X
Эксперт С++
 Аватар для Mr.X
2802 / 1578 / 247
Регистрация: 03.05.2010
Сообщений: 3,666
30.11.2010, 20:14     Степень симметрии #4
Для разнообразия без циклов:
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
//////////////////////////////////////////////////////////////////////////////////////
#include <algorithm>
#include <functional>
#include <iostream>
#include <sstream>
#include <string>
//////////////////////////////////////////////////////////////////////////////////////
typedef std::string  T_str;
//////////////////////////////////////////////////////////////////////////////////////
int main()
{
    std::cout << "n = ";
    int  n = 0;
    std::cin >> n;
    std::ostringstream  sout;
    sout << n;
    T_str  num_str(sout.str());        
    T_str  num_str_res(num_str);
    std::transform(num_str.begin(), num_str.end(), num_str.rbegin(), 
                   num_str_res.begin(), std::minus<T_str::value_type>());    
    
    std::cout << "symm_power = "
              << std::count_if(num_str_res.begin(), num_str_res.end(), 
                               std::logical_not<T_str::value_type>())
                 + num_str.size() % 2
              << std::endl;    
}
Yandex
Объявления
30.11.2010, 20:14     Степень симметрии
Ответ Создать тему
Опции темы

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