Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.02.2011, 13:24   #1
nd0ut
 
Регистрация: 06.02.2011
Сообщений: 4
По умолчанию Поиск бага в решении задачи


Пример в текстовом виде:
Цитата:
Jgnnq yqtnf! Vjku oguucig ku xgta ugetgv.
Мой код:
Код:
#include "stdafx.h"
#include <stdio.h>
#include <iostream>

void PrevChar(char c, int n)
{
    int count = 26;
    int k = -1;
    if(count - ('Z'-toupper(c))<=n)
        k=n-(count - ('Z'-toupper(c)+1));
    if(islower(c)) {
        if(k != -1)
            printf("%c", tolower('Z'+1-k));
        else
            printf("%c", c-n);
    }
    else if(isupper(c)) {
        if(k != -1)
            printf("%c", toupper('Z'+1-k));
        else
            printf("%c", c-n);
    }
    else
        printf("%c", c);
}

int main()
{
    freopen("input.txt","r",stdin);
    freopen("output.txt","w",stdout);

    char c;
    int n = 0;
    int min = 260;

    while (scanf("%c", &c) == 1) {
        if(isalpha(c)) {
            n++;
        }
        else if(!isalpha(c)) {
            if(n<min && n>1)
                min=n;
            n=0;
        }
    }
    if(n<min && n>1)
        min=n;
    while(min>26)
        min=min-26;
    freopen("input.txt","r",stdin);
    while (scanf("%c", &c) == 1) {
        PrevChar(c,min);
    }

     fclose (stdout);
    fclose (stdin);

    return 0;
}
На примере отрабатывает на отлично. Однако олимпиадная система авто-проверки кода (работает на MinGW) подсовывает на вход ещё и какие-то другие строки, с которыми программа работает не верно. Уже второй день бьюсь с решением, пробовал давать на вход самые разные варианты: только с одним символом, без символов, с непрерывной последовательностью, с кратным алфавиту числом символов, и т.д. На все это программа дает вполне правильный, по моему мнению, вывод (я даже вручную буквы в алфавите считал).

Ещё в задаче есть некоторые неясности по поводу кириллицы в строке (при компилияции через VS программа вообще не работает, вылетает с ошибкой, а через MinGW обрабатываются нормально, т.е. как знаки, а не буквы), по поводу последовательности (единичный символ считается за последовательность?), и что делать в случае, если в строке один символ (тогда минимальная длина выходит ноль).

Заранее спасибо, и извините за отсутствие комментариев в коде и задачу в виде картинки.

P.S: допускаю, что трабла не в коде, а в авто-проверке. Но, прежде чем писать в саппорт, хотелось бы убедиться.
nd0ut вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема в решении задачи [С++] asp1k Помощь студентам 0 17.11.2010 16:16
Нужна помощь в решении задачи HeaD90 Помощь студентам 0 02.05.2009 18:47
помогите в решении задачи. gaddam Паскаль, Turbo Pascal, PascalABC.NET 2 24.11.2008 19:06
Помогите в решении задачи! Toxass Общие вопросы Delphi 16 19.11.2008 22:06