Re[2]: Делимость числа и сумма его цифр.
От: Assasin291  
Дата: 19.03.12 16:40
Оценка:
Здравствуйте, Vintik_69, Вы писали:

V_>Получилась рекуррентная формула, которую осталось только запрограммировать (с мемоизацией).


Вчера попробовал запрограммировать формулу, но сегодня, запустив, получил в качестве ответа ноль(искал количество чисел, не превосходящих 140, делящихся на 13 и с суммой цифр от 11 до 18), хотя ответ должен получиться "3" (39, 65, 78). Можете указать ошибку? Просто дебажить такое очень трудно.

unsigned func(unsigned i, unsigned q, unsigned s, bool l) {
    if(i != 20)
    {
        unsigned long long temp = 0;
        if(l)
        {
            for (unsigned d = 0; d <= 9; ++d)
                temp += func(i + 1, (q * 10 + d) % k, s + d, true);
            return temp;
        }
        else
        {
            for(unsigned d = 0; d <= aArray[i]; ++d)
                temp += func(i + 1, (q * 10 + d) % k, s + d, d < aArray[i]);
            return temp;
        }
    }
    else
        //p — левая граница суммы цифр, t — правая.
        if(q == 0 && p <= s && s <= t)
            return 1;
        else
            return 0;
}
void check() {
    num = func(0, 0, 0, false);
    cout << num;
}

aArray[i] — i-ая цифра числа 140. Сам массив выглядит так: 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 0 (17 нулей и 1, 4, 0). aArray[17] = 1, aArray[18] = 4, aArray[19] = 0.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.