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

Задача на зашифрование 4-х значных чисел - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Программа на С++ вылетает, не могу понять почему!? http://www.cyberforum.ru/cpp-beginners/thread911903.html
#include <iostream> #include <stdlib.h> #include <stdio.h> #include <allegro.h> #include <math.h> #include <time.h> #define W 1024 #define H 768 BITMAP *bmp;
C++ Ежедекадно в течение июня измерялся уровень воды в десяти речках. Определить подекадно: в каких речках наблюдался самый высокий уровень Ежедекадно в течение июня измерялся уровень воды в десяти речках. Определить подекадно: в каких речках наблюдался самый высокий уровень (и какой). http://www.cyberforum.ru/cpp-beginners/thread911893.html
Структуры. Определить число поездок, в которых стоимость перевезенного груза была максимальной C++
Известен вес и стоимость одной тонны груза, перевезенного самосвалом в каждой из десяти поездок. Определить число поездок, в которых стоимость перевезенного груза была максимальной. ребят напишите пожалуйста программу, если не сложно
C++ Что такое константные аргументы и процесс линковки программы?
Помогите ответить на вопросы которые в заголовке)
C++ Числа фибоначи http://www.cyberforum.ru/cpp-beginners/thread911876.html
Написать программу для вычисления н-ного числа фибоначи. Я написал рекурсией. Но мне почему-то надо без нее, но и что бы код был довольно простой и понятный. Как можно переделать? вот мой рекурсивный код. Надо чтобы на не сложном уровне, но без рекурсии. #include <iostream> #include <iomanip> using namespace std; int fib(int); int main() { setlocale(LC_ALL, "Russian");
C++ Реализация алгоритма RLE Есть задачка, надо реализовать две функции "закодировать" и "раскодировать" массив данных типа: char mass = {'a','a','a','a','c','b','b','k','b','b','b','b'}; В итоге нужно получить букву и количество её повторений, реализовать так сказать сжатие, например: {'a4','c1','b2','k1','b4'} подробнее

Показать сообщение отдельно
Olivеr
 Аватар для Olivеr
411 / 407 / 13
Регистрация: 06.10.2011
Сообщений: 830
25.06.2013, 21:26     Задача на зашифрование 4-х значных чисел
Даже если взять 1234, то декодирование даст 1204
Кодирование:
1234
8901 // (x + 7) % 10
0981 //0 2
0189 //1 3
= 189

Декодирование:
0189
0412 // if (x % 10 > 6) - > x % 10 - 7, else x % 10 + 3
1402 //0 2
1204 //1 3
= 1204
Может в учебнике есть пример?

Добавлено через 7 минут
Цитата Сообщение от Olivеr Посмотреть сообщение
Даже если взять 1234, то декодирование даст 1204
все, я сообразил как исправить
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
#include <iostream>
#include <stdexcept>
using namespace std;
 
int encode(int x) throw(invalid_argument)
{
    if (x < 1000 || x > 9999)
        throw invalid_argument("x must be in [1000; 9999]\n");
    int a[4] = {0, 0, 0, 0};
    for(int i = 3; x; --i, x /= 10)
        a[i] = ( x + 7 ) % 10;
    swap(a[0], a[2]);
    swap(a[1], a[3]);
    int new_x = a[3] + a[2] * 10 + a[1] * 100 + a[0] * 1000;
    return new_x;
}
 
int decode(int x) throw(invalid_argument)
{
    if (x > 9999)
        throw invalid_argument("x is greater than 9999\n");
    int a[4] = {0, 0, 0, 0};
    if (x < 999) a[0] = 3;
    if (x < 99) a[1] = 3;
    if (x < 9) a[2] = 3;
    for(int i = 3; x; --i, x /= 10)
        if ( x % 10 > 6 ) a[i] = x % 10 - 7;
        else a[i] = x % 10 + 3;
    swap(a[0], a[2]);
    swap(a[1], a[3]);
    int new_x = a[3] + a[2] * 10 + a[1] * 100 + a[0] * 1000;
    return new_x;
 
}
int main()
{
    cout << "X   \tEncoded\tDecoded\n";
    for (int x, i = 1000; i != 10000; ++i) {
        x = encode(i);
        cout << i << "\t" << x;
        x = decode(x);
        cout << "\t" << x << endl;
    }
    return 0;
}
Добавлено через 7 минут
UPD:
исправил ошибку
Кликните здесь для просмотра всего текста
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
#include <iostream>
#include <stdexcept>
using namespace std;
 
int encode(int x) throw(invalid_argument)
{
    if (x < 1000 || x > 9999)
        throw invalid_argument("x must be in [1000; 9999]\n");
    int a[4] = {0, 0, 0, 0};
    for(int i = 3; x; --i, x /= 10)
        a[i] = ( x + 7 ) % 10;
    swap(a[0], a[2]);
    swap(a[1], a[3]);
    int new_x = a[3] + a[2] * 10 + a[1] * 100 + a[0] * 1000;
    return new_x;
}
 
int decode(int x) throw(invalid_argument)
{
    if (x > 9999)
        throw invalid_argument("x is greater than 9999\n");
    int a[4] = {0, 0, 0, 0};
    if (x <= 999) a[0] = 3;
    if (x <= 99) a[1] = 3;
    if (x <= 9) a[2] = 3;
    if (x == 0) a[3] = 3;
    for(int i = 3; x; --i, x /= 10)
        if ( x % 10 > 6 ) a[i] = x % 10 - 7;
        else a[i] = x % 10 + 3;
    swap(a[0], a[2]);
    swap(a[1], a[3]);
    int new_x = a[3] + a[2] * 10 + a[1] * 100 + a[0] * 1000;
    return new_x;
 
}
int main()
{
    cout << "X   \tEncoded\tDecoded\n";
    for (int x, i = 1000; i != 10000; ++i) {
        x = encode(i);
        if (i != decode(x))
            cout << i << "\t" << x << "\t" << x << endl;
    }
    return 0;
}
 
Текущее время: 02:53. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru