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

Постоянная Капрекара. - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.90
Temirlan90
 Аватар для Temirlan90
131 / 131 / 8
Регистрация: 30.09.2010
Сообщений: 333
04.05.2011, 20:56     Постоянная Капрекара. #1
Постоянная Капрекара
(Время: 1 сек. Память: 16 Мб Сложность: 22%)

Возьмем четырехзначное число, в котором не все цифры одинаковы, например 6264. Расположим цифры сначала в порядке убывания - 6642; затем, переставив их в обратном порядке, получим 2466. Вычтем последнее число из 6642. На следующем шаге с полученной разностью проделаем тоже самое. Через несколько таких действий получится число, переходящее само в себя и называемое постоянной Капрекара.

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

Входной файл INPUT.TXT содержит одну строку, в которой записано четырехзначное число.
Выходные данные

В выходной файл OUTPUT.TXT записываются: в первой строке постоянная Капрекара, во второй – количество шагов для ее получения.
Пример
INPUT.TXT
1234
OUTPUT.TXT
6174
3
Не понятны входные данные.

Добавлено через 23 минуты
Решение :
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
50
51
52
53
54
55
#include <iostream>
#include <vector>
#include <algorithm>
#include <functional>
using namespace std;
class result {
public:
    result(int kaprecar,int steps) :_kaprecar(kaprecar), _steps(steps) {
    
    }
    int kaprecar() {        
        return _kaprecar;
    }
    int steps() {
        return _steps;
    }
private:
    int _kaprecar;
    int _steps;
};
result calc(int n) {
    typedef vector<char> dVector;
    dVector digits;
    int iterCount = 0; 
    while(true) {
        int oldN = n;
        int count = 4;
        while(count --> 0) {
            digits.push_back(n % 10);
            n /= 10;       
        }
        sort(digits.begin(), digits.end(), less<int>()); 
        int n1 = 0, n2 = 0, multip = 1;
        for(dVector::const_iterator it = digits.begin(); it != digits.end(); ++it) {           
            n1 = n1 * 10 + *it;
            n2 = *it *multip + n2;         
            multip *= 10;
        }
        digits.clear();   
        n = n2 - n1;
        ++iterCount;
        if(oldN == n) {
            return result(n, iterCount - 1);           
        }
    }
}
int main() {
    int n;  
    freopen("INPUT.TXT", "r", stdin);
    freopen("OUTPUT.TXT", "w", stdout);
    cin >> n;
    result r = calc(n);
    cout << r.kaprecar() << endl << r.steps() << endl;
    return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.05.2011, 20:56     Постоянная Капрекара.
Посмотрите здесь:

Turbo Pascal Постоянная Капрекара
C++ постоянная ссылка
Постоянная ошибка C++
BSOD Постоянная перезагрузка
Turbo Pascal Постоянная Капрекара
Запись из файла двумерного массива N x 2, где N -величина не постоянная C++
C++ измерения,задержка,цикличность,постоянная
C++ Число, переходящее само в себя, - постоянная Капрекара

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Shaykemelov
9 / 9 / 2
Регистрация: 14.11.2011
Сообщений: 27
29.12.2011, 10:35     Постоянная Капрекара. #2
все правильно просто в файле "input.txt" задайте входные данные
Yandex
Объявления
29.12.2011, 10:35     Постоянная Капрекара.
Ответ Создать тему
Опции темы

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