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

Найти ошибку в решении задачи "Шифровка" (acmp) - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ С чего начать учиться программированию http://www.cyberforum.ru/cpp-beginners/thread930305.html
Подскажит пожалуйста с чего начать учиться программированию, какие советы вы можете дать?
C++ Что делает строка? Что делает 14 строка? P.S. Программа читает пары с файла и выводит их на экран. # include <iostream> # include <string> # include <vector> # include <algorithm> # include <cmath> # include <windows.h> #include <fstream> using namespace std; http://www.cyberforum.ru/cpp-beginners/thread930292.html
C++ Среда wxDevC++
Вопрос наверное простой, но никак не могу рзобраться. Итак по пунктам: 1) Как включить автозавершение кода? У меня он либо не работает, либо работает, но выдает список методов которых нет в моем классе. Не понятно как вообще включить автозавершение. 2) По-видимому вопрос связан с предыдущим. Почему-то не отображается мой класс в инспекторе. Добавлено через 1 час 52 минуты Неужели ни кто не...
getchar() в linux C++
Здравствуйте! Я создал небольшую консольную программу. Сначала мне нужно ввести данные с помощью cin и нажать Enter. Сразу после cin у меня идет команда getchar(), но она, вместо того, чтобы ждать нажатия клавиши, записывает Enter, который я нажал при вводе данных через cin. Как решить эту проблему, и почему так происходит? Пожалуйста помогите.
C++ code::block автоформатирование текста http://www.cyberforum.ru/cpp-beginners/thread930248.html
в RAD 2010 есть такая классная штука "format source" которая приводит код в человеческий вид, есть ли такая фича для код блока?
C++ Qt Creator и автодополнение кода Решил попробовать Qt Creator в качестве IDE для С++ проектов вместе с mingw 4.8.1. Заметил, что не работает автодополнение кода для С++11 фич (типа std::array), но сам код компилируется нормально. В pro файл добавлял это:QMAKE_CXXFLAGS += -std=c++11Помнится была такаяже проблема с NetBeans, но там это решилось добавлением макроса __cplusplus=201103L и после этого все уже автодополнялось. А как в... подробнее

Показать сообщение отдельно
nuts23
0 / 0 / 0
Регистрация: 22.06.2013
Сообщений: 30

Найти ошибку в решении задачи "Шифровка" (acmp) - C++

30.07.2013, 12:45. Просмотров 653. Ответов 1
Метки (Все метки)

Шифровка
(Время: 1 сек. Память: 16 Мб Сложность: 29%)

Разведкой был перехвачен ряд шифровок, которые передавал Джеймс Бонд. Известно, что каждое послание зашифровано методом циклического сдвига. Суть которого в том, что каждая буква заменяется на букву, отстоящую в алфавите от первой на определенном расстоянии. Это расстояние называется знаменателем шифра. Так, при знаменателе шифра 2 буква D превратится в F, буква Q – в S, а Z – в B. Известно, что Бонд использует знаменатели от 0 до 25, и составляет послания исключительно из заглавных букв английского алфавита. Знаменатели в шифровках постоянно меняются, так что расшифровать содержимое послания будет не просто. После тщательного анализа удалось примерно определить предмет посланий. Теперь для каждого послания точно известно одно из входящих туда слов.

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

В первой строке входного файла INPUT.TXT содержится строка с перехваченным посланием, а во второй строке – слово, которое обязательно присутствует в этом послании. Обе строки состоят только из заглавных английских букв и содержат не больше 40 символов.

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

В выходной файл OUTPUT.TXT выведите расшифрованный текст, либо сообщение «IMPOSSIBLE», если разгадать шифровку невозможно. В тех случаях, когда расшифровка возможна с различными знаменателями, то следует вывести вариант с наименьшим таким значением.
C++ (Qt)
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
#include <stdio.h>
#include <stdio.h>
#include <math.h>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <string>
int main()
{
    freopen("input.txt","r",stdin);
    freopen("output.txt","w",stdout);
    char A[41];
    char B[41];
    gets(A);
    gets(B);
    int d1;
    int d2;
    d2 = strlen(B);
    int i = 0;
    int j = 0;
    int k = 0;
    int z = 0;
    int d0;
    d0 = 10000;
    int imax = -1;
    while (A[i])
    {
        j = 0;
        k = i;
        z = 0;
        d1 = int(A[k])-int(B[j]);
        while (d1 == int(A[k++])-int(B[j++]) && A[k-1]!='\0' && B[j-1]!='\0')
        {
            ++z;
            if (z > imax) // imax - длина совпадения
            {
                imax = z;
                if (d1 < d0) // минимальный знаменатель
                    d0 = d1;
            }
            //printf("%d", int(A[k-1]));
        }
 
        ++i;
    }
    if (imax < d2)
        printf("IMPOSSIBLE");
    else
    {
        for (int i = 0; A[i]; ++i)
            printf("%c", char(int(A[i]-d0)));
    }
    return 0;
}
WA на 5 тесте. В обсуждении к задаче сказано, что ошибка в 5-ом, скорее всего, связана с тем, что программа находит не минимальный знаменатель.

Добавлено через 23 часа 24 минуты
Ап. Проблема ещё актуальна.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru