Другие языки программирования и технологии

Не могу решить простую задачу на С++

Добрый день, вот простенькая задача "В одном шаге от счастья"

Ее конечно можно запросто решить через преобразования типов, str to int и наоборот.

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

Вот код

Вроде синтаксических ошибок - нет, но алгоритм выдает неправильные выходные жанные.

Код я достаточно прокомментировал, так что сразу будет ясно что яхотел сделать.

Может кто поймет что я не так делаю?
Павел Орлов
Павел Орлов
4 674
Подкорректировал, ну, как мог...
Сергей Чугунов
Сергей Чугунов
79 794
Лучший ответ
Сергей Чугунов #include <string>
#include <fstream>
struct t {
    t(int a) : p(a - 1), c(a), n(a + 1), h(false) { s(); }
    bool x() { return h; }
    void s() {
        int g = 1000, b = c / g, m = b * g;
        if (c > 1 && abs(k(c / g) - k( c - m)) == 1 && k(p / g) == k(p - m) || k(n / g) == k(n - m)) h = true;
    }
    int k(int d) { return d / 100 + d % 10 + (d / 10) % 10; }
    int p, c, n;
    bool h;
};
int main() {
    std::fstream i, o;
    int q, e, n = 0;
    i.open("INPUT.TXT");
    i >> q;
    o.open("OUTPUT.TXT", 2);
    std::string s("");
    while (n++ < q) {
       &nbs
Сергей Чугунов http://pastebin.com/0bZWj29p
Вообще что-то непонятное делаешь, если честно. Проблема, видимо, тут:
if(A[ i ] = 9)
- присваивание, а не сравнение. Про порядок правильно заметили. Ну и вообще правильнее, как по мне, не на массив разбивать, а потом инкримент вручную прописывать, а написать функции суммы цифр, "счастливости"
bool C(int A)
{
return S(A00)==S(A/1000);
}

ну и

if ( (A)%9==0 && ( C(A-1) || C(A+1) )) cout << "Yes";
else cout << "No";
Павел Орлов Спасибо, вот я на форму написал в чем ошибка
cyberforum. ru/cpp-beginners/thread807557.html
> Вот код
Адский термояд.

> Может кто поймет что я не так делаю?
Сначала пишешь, а потом думаешь наверно! А программисты поступают ровно наоборот.

#include <fstream>

using namespace std;

bool happy(int n) {
    return n / 100000 + n / 10000 % 10 + n / 1000 % 10 == n / 100 % 10 + n / 10 % 10 + n % 10;
}

int main() {
    ifstream in("input.txt");
    ofstream out("output.txt");
    int n;
    in >> n;
    while (in >> n) out << (happy(n - 1) || happy(n + 1) ? "Yes" : "No") << endl;
    return 0;
}
Антон Сивухин
Антон Сивухин
88 902
Сергей Чугунов Там по условию первое число не билет, а количество билетов, а дальше может быть их стоимость, телефоны любовниц, счета в зарубежных банках, счёт матча Спартак - Динамо за 1936 год, внешний долг США и 9 с половиной недель.
мне вот чего непонятно... .
почему у тебя в Q цикл от 0 до 5? а не от 5 до 0?
т. е. мне кажется, что в твоей записи 111111 + 1 будет 211111 вместо 111112
Павел Орлов Когда я считываю очередной номер билета в массив, то яего считываю наоборот, тоесть номер билета 123456, в массиве будет храниться так: 654321
а нельзя поступить просто: сперва к прочитанной цифре прибавить единицу и потом уж проверить его на счастливость, цель то стоит определить будет он счастливым или нет иначе вам придется заморачиваться при прибавлении единицы к левой части при 999 и с прибавлением единицы в правой части
зачем стринг в инт преобразовывать? просто отсекай последние цифры и складывай их, сначала отсеки последние 3 от первых 3, потом разложи по одной цифре, далее их сложи и сравни. тут не нужны ни преобразования, ни массивы. мне интересно, что вы возвращаете в функции Q? равенство? ? pff
Арсен Чотчаев
Арсен Чотчаев
1 295
Павел Орлов спасибо, я знаю что так можно, мне интересно в чем тут ошибка.