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

Не могу найти ошибку - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Рекурсия (решение уравнений) http://www.cyberforum.ru/cpp-beginners/thread807537.html
Помогите написать программу используя рекурсию. Ниже прикреплён сам файл с уравнениями. За ранее спасибо.
C++ Ключ в сортировках часто вижу предложения с употреблением слова "Ключ", но как он выглядит или что он из себя представляет я понять не могу. http://www.cyberforum.ru/cpp-beginners/thread807535.html
Автоматизированная информационно-поисковая система «Справочник спортивного фаната» C++
(ООП) Автоматизированная информационно-поисковая система «Справочник спортивного фаната»
Сортировка слов в предложении по алфавиту C++
доброго времени суток! у меня такая проблема - нужно распечатать в алфавитном порядке слова из предложения. так вот, когда на английском вводятся слова, все норм, а на русском какие то закорючки... помогите пожалуйста добрые люди!:) вот код #include "stdafx.h" #include <iostream> #include <stdio.h> #include <string.h> #include <locale.h> void main() {
C++ Размер массива объектов http://www.cyberforum.ru/cpp-beginners/thread807496.html
Метод Count() подсчёта количества элементов массива (массив из сообщений) не правильно распознаёт элементы,заполняет и выводит правильно а если в методе обратиться к содержимому этого объекта то он не правильно работает // labar.cpp: определяет точку входа для консольного приложения. // #include "stdafx.h" #include "iostream" #include "conio.h" using namespace std;
C++ Файлы. Подсчитать количество символов и строк Дан текстовый файл. Дописать в его конце следую¬щие данные: количество строк, количество символов в каждой строке, количество чисел в каждой строке. подробнее

Показать сообщение отдельно
Harutyunyan
1 / 1 / 0
Регистрация: 28.09.2012
Сообщений: 91
13.03.2013, 16:27     Не могу найти ошибку
Добрый день, вот простенькая задача:

"В одном шаге от счастья"
Кликните здесь для просмотра всего текста

Вова купил билет в трамвае 13-го маршрута и сразу посчитал суммы первых трёх цифр и последних трёх цифр номера билета (номер у билета шестизначный). Оказалось, что суммы отличаются ровно на единицу. «Я в одном шаге от счастья», — подумал Вова, — «или предыдущий или следующий билет точно счастливый». Прав ли он?
Входные данные

Входной файл INPUT.TXT содержит в первой строке число K – количество тестов. В следующих K строках записаны номера билетов. Количество тестов не больше 10. Номер состоит ровно из шести цифр, среди которых могут быть и нули. Гарантируется, что Вова умеет считать, то есть суммы первых трех цифр и последних трех цифр отличаются ровно на единицу.
Выходные данные

Выходной файл OUTPUT.TXT должен содержать K строк, в каждой из которых для соответствующего теста следует указать "Yes", если Вова прав, и "No", если нет.

Пример:
Код
INPUT.TXT                  OUTPUT.TXT
3
715068                       Yes
445219                       No
012200                       Yes


Ее конечно можно решить намного проще, например считать число и сложить/вычест 1, и полуть каждый разряд через деление - мне подобные решения не нужны.

Я попробовал подругому, тоесть представить номер билета в массиве, в каждом элементе 1 - разряд числа.
Вот мое решение:
Кликните здесь для просмотра всего текста

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
#include <fstream>
 
// Функуия возвращает истуну, если билет счастливый
bool Q(int *A, int q = 1)
{
    
    for(int i = 0; i < 6; i++)
        if(q > 0) // Получаю следующий номер билета
        {
            if(A[i] = 9)
            {
                A[i] += q;
                A[i + 1] %= 10; 
            } else break;
        } else // Получаю предыдущий номер билета
            if(A[i] < 1)
                A[i] = 9;   
            else {A[i + 1] -= 1; break;}
    
    /*Складываю или вычетаю 1, к последнему элементу, 
    и в зависимости от числа меняю остальные разряды.
    т.е если: 359999, при прибавлении 1, должно быть 360000, а при вычетании 1,
    350000, будет 349999*/
 
    int a = *A + A[1] + A[2],
    b = A[3] + A[4] + A[5];
 
    return (a == b);
}
 
int main()
{
    std::fstream I("input.txt"), O("output.txt", 2);
    char c;
    int a, b, n, k[7]; I >> n;
    while(n--)
    {
        // Число записываю в массив в обратном порятке, что бы легче
        // было получить номер предыдущего или следующего билета
        for(int i = 0; i < 6; i++) 
            I >> c, k[5 - i] = c - 48;
        O << (Q(k) || Q(k, -1) ? "Yes\n" : "No\n");
    }
}


Алгоритм всегда выводит "Yes", в чем проблема?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 06:36. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru